Я пытаюсь обработать подозрительные сообщения в WCF с помощью транспорта MSMQ.
Я перешел по ссылке ниже для создания оригинальных и ядовитых сервисов.
http://msdn.microsoft.com/en-us/library/aa395218.aspx
Единственное отличие состоит в том, что вместо собственного хостинга я разместил 2 службы в IIS с одним хост-проектом.
Ниже приведена конфигурация обеих служб.
<services>
<service behaviorConfiguration="MainMSMQWCFService.Service1Behavior"
name="MainMSMQWCFService.OrderProcessorService">
<endpoint address="net.msmq://localhost/private/servicemodelsamplespoison"
binding="netMsmqBinding" bindingConfiguration="PoisonBinding"
contract="MainMSMQWCFService.IOrderProcessor" />
</service>
<service behaviorConfiguration="MainMSMQWCFService.PoisonHandlingServiceBehavior"
name="MainMSMQWCFService.PoisonHandlingService">
<endpoint address="net.msmq://localhost/private/servicemodelsamplespoison;poison"
binding="netMsmqBinding"
bindingConfiguration="PoisonBinding2"
contract="MainMSMQWCFService.IOrderProcessor">
</endpoint>
</service>
</services>
Обе службы работают правильно.
Проблема заключается в том, что когда сообщение помещается в очередь отравления, служба отравления не обрабатывает сообщение.
Я наблюдал за сообщениями в очереди Poison, они нацелены только на оригинальный сервис. тогда как ядовитая служба может их обработать? Пройдя через MSDN, я узнал, что, установив атрибут поведения службы, канал WCF решает эту проблему. Следующий параграх объясняет то же самое.
"Сообщения в очереди подозрительных сообщений - это сообщения, адресованные службе, обрабатывающей сообщение, которая может отличаться от конечной точки службы вредоносных сообщений. Поэтому, когда служба подозрительных сообщений читает сообщения из очереди, WCF канальный уровень обнаруживает несоответствие в конечных точках и не отправляет сообщение. В этом случае сообщение адресовано службе обработки заказов, но принимается службой подозрительных сообщений. Продолжать получать сообщение, даже если сообщение адресовано с другой конечной точкой, мы должны добавить ServiceBehavior для фильтрации адресов, где критерий соответствия должен соответствовать любой конечной точке службы, которой адресовано сообщение. Это необходимо для успешной обработки сообщений, которые вы читаете из очереди вредоносных сообщений. "
Но моя служба отравления не обрабатывает отравленные сообщения?
Я не могу выяснить проблему.