Слушатели MSMQ, использующие WCF - PullRequest
8 голосов
/ 12 октября 2011

Кто-нибудь знает, как реализовать MSMQ Listeners с использованием WCF ?

У меня есть 2 встроенные службы wcf, одна для отправки данных в очередь MSMQ, а другая вызывается слушателем MSMQ, когда в очередь MSMQ вставляется. Теперь я хочу знать, как и где мне нужно написать этот слушатель MSMQ.

1 Ответ

4 голосов
/ 12 октября 2011

Вам не нужно вручную внедрять прослушиватель очереди в вашем сервисе.

Просто создавая контракт на обслуживание, вы указываете метод-обработчик, который будет вызываться при поступлении сообщения в локальную очередь.

Вы, вероятно, (или должны) иметь что-то вроде этого:

[OperationContract(IsOneWay = true, Action = "*")]
void HandleMyMessage (MsmqMessage<String> message);

Это обеспечит вызов метода HandleMyMessage () в реализации вашей службы при доставке сообщения.*

ОБНОВЛЕНИЕ

В ответ на ваш вопрос в комментарии ниже, чтобы определить адрес очереди, вы можете сделать это в конфигурации <System.ServiceModel>:

<services>
  <service 
      name="Microsoft.ServiceModel.Samples.OrderProcessorService"
      behaviorConfiguration="CalculatorServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
      </baseAddresses>
    </host>
    <!-- Define NetMsmqEndpoint -->
    <endpoint address="net.msmq://localhost/private/ServiceModelSamplesTransacted"
              binding="netMsmqBinding"
              contract="Microsoft.ServiceModel.Samples.IOrderProcessor" />
    <!-- the mex endpoint is exposed at http://localhost:8000/ServiceModelSamples/service/mex -->
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>
</services>

Отсюда: http://msdn.microsoft.com/en-us/library/ms789032.aspx

...