Использовать службу рабочего процесса с msmqIntegrationBinding
Я боролся с настройкой службы рабочего процесса, которая использует msmqIntegrationBinding. Проблема, с которой я столкнулся, заключается в том, что я всегда получаю это исключение сериализации "System.ServiceModel.ProtocolException: при десериализации сообщения произошла ошибка. Сообщение не может быть получено. ---> System.Runtime.Serialization.SerializationException: произошла ошибка при десериализации тела XML сообщения MSMQ. Сообщение не может быть получено. Убедитесь, что контракт на обслуживание оформлен соответствующими атрибутами [ServiceKnownType] или что свойство TargetSerializationTypes установлено в MsmqIntegrationBindingElement."
Насколько я понял, помощник по сериализации не может найти какие-либо типы для сериализации сообщения, даже если я использую универсальный тип MsmqMessage
MyMessageType генерируется из.xsd с xsd.exe.
ОБНОВЛЕНИЕ: ПРОБЛЕМА РЕШЕНА Я сделал все настройки для WCF (Action, ServiceKnownType...) в контракте (интерфейсе) вместо того, чтобы делать это в рабочем процессе. Когда я переместил его в рабочий процесс, все стало работать!!
1 ответ
Как новичок WCF это меня немного озадачило. Я пропустил [ServiceKnownType]
атрибут при прохождении MSDN MSMQ пример.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
[ServiceKnownType(typeof(PurchaseOrder))]
public interface IOrderProcessor
{
[OperationContract(IsOneWay = true, Action = "*")]
void SubmitPurchaseOrder(MsmqMessage<PurchaseOrder> msg);
}