WCF MsmqIntegrationBinding - PullRequest
       5

WCF MsmqIntegrationBinding

1 голос
/ 16 ноября 2011

Должны ли сообщения, извлеченные из очереди MSMQ, добавляться в очередь через процесс, использующий MsmqIntegrationBinding, чтобы служба WCF выбрала их из очереди, используя MsmqIntegrationBinding? У нас есть устаревший процесс, который записывает полезную нагрузку xml в очередь, используя System.Messaging, и когда я запускаю свой процесс, чтобы попытаться выбрать сообщение из очереди, ничего не происходит (имеется в виду, что сообщение остается в очереди). Мне просто интересно, если сообщение помещено в очередь с использованием другого процесса, можете ли вы по-прежнему использовать WCF / MsmqIntegrationBinding для удаления сообщения из очереди?

Я знаю, что в идеале вы должны использовать DataContracts и NetMsmqBinding, но, к сожалению, в его ситуации у нас нет возможности изменить процесс, заключающий в себе сообщения.

Как я уверен, вы можете сказать, что я все еще очень невежественен с WCF / MSMQ, поэтому, возможно, решение простое.

Любые предложения будут с благодарностью.

Спасибо

S

1 Ответ

3 голосов
/ 16 ноября 2011

MsmqIntegrationBinding может использовать различные средства форматирования для чтения / записи данных в очередь.Это можно сделать, установив свойство serializationFormat вашей привязки.Например, чтобы взаимодействовать с COM-клиентом, вы установите для параметра serializationFormat значение ActiveX.Для взаимодействия с клиентом .net установите его в Xml.

<service name="MyQueueListenner">

    <!-- Active X endpoint -->
    <endpoint address="msmq.formatname:DIRECT=OS:.\private$\myQueue"
              binding="msmqIntegrationBinding"
              bindingConfiguration="COMConfig"
              contract="MyContract" />

    <!-- .Net endpoint-->
    <endpoint address="msmq.formatname:DIRECT=OS:.\private$\myOtherQueue"
              binding="msmqIntegrationBinding"
              bindingConfiguration="DotNetConfig"
              contract="MyContract" />

  </service>
  ...

  <msmqIntegrationBinding>
    <binding serializationFormat="ActiveX" name="COMConfig" durable="false" exactlyOnce="false">
      <security mode="None" />
    </binding>
    <binding serializationFormat="Xml" name="DotNetConfig" durable="false" exactlyOnce="false">
      <security mode="None" />
    </binding>
  </msmqIntegrationBinding>

Это позволяет вам использовать весь спектр форматеров, обеспечивая наибольший диапазон взаимодействия с клиентами очереди.

Полный список значений приведен здесь: http://msdn.microsoft.com/en-us/library/system.servicemodel.msmqintegration.msmqmessageserializationformat.aspx

...