Используйте службу рабочего процесса с msmqIntegrationBinding

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

Насколько я понял, помощник по сериализации не может найти какие-либо типы для сериализации сообщения, хотя я использую общий тип MsmqMessage ‹MyMessageType› как в контракте службы, так и в рабочем процессе.

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

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


person Kjell-Åke Gafvelin    schedule 13.09.2010    source источник


Ответы (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);
}
person row1    schedule 20.11.2012