Использовать службу рабочего процесса с 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);
}
Другие вопросы по тегам