Использовать службу рабочего процесса с msmqIntegrationBinding - PullRequest
1 голос
/ 13 сентября 2010

Я изо всех сил пытался настроить службу рабочего процесса, которая использует msmqIntegrationBinding.Проблема, с которой я столкнулся, состоит в том, что я всегда получаю это исключение сериализации "System.ServiceModel.ProtocolException: при десериализации сообщения произошла ошибка. Сообщение не может быть получено. ---> System.Runtime.Serialization.SerializationException:Произошла ошибка при десериализации тела XML сообщения MSMQ. Сообщение не может быть получено. Убедитесь, что контракт на обслуживание оформлен соответствующими атрибутами [ServiceKnownType] или для свойства TargetSerializationTypes установлено значение MsmqIntegrationBindingElement. "Насколько я понял, помощник по сериализации не может найти какие-либо типы для сериализации сообщения, даже если я использую универсальный тип MsmqMessage как в контракте на обслуживание, так и в рабочем процессе.

MyMessageType создается из .xsd с помощью xsd.exe.

ОБНОВЛЕНИЕ: РЕШЕНИЕ ПРОБЛЕМЫ Я сделал все настройки для WCF (Action, ServiceKnownType ...) по договору (межфасе) вместо того, чтобы делать это в рабочем процессе.Когда я переместил его в рабочий процесс, все начало работать !!

1 Ответ

1 голос
/ 20 ноября 2012

Как начинающий 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);
}
...