2011-10-12 90 views
7

是否有人知道如何實施MSMQ聽衆 * 使用WCF *?使用WCF的MSMQ聽衆

+0

燦你更具體嗎? – Xhalent

+0

關於這麼多的信息:http://stackoverflow.com/questions/372935/wcf-and-msmq http://stackoverflow.com/questions/2154853/msmq-and-wcf-service http:///stackoverflow.com/questions/1526958/msmq-wcf-and-flaky-servers –

+0

我有2個wcf服務構建,1發送數據到MSMQ隊列和另一個由MSMQ監聽器調用時有一個插入MSMQ queue.Now我想知道如何以及在哪裏我需要寫這個MSMQ監聽器。 –

回答

3

您不需要在您的服務上手動實現隊列偵聽器。

只需創建服務操作合同,即可指定在消息到達隊列時將調用的處理程序方法。

你可能(或應該)是這樣的:

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

這將確保在傳遞一個消息的方法HandleMyMessage()在你的服務實現將被調用。

UPDATE

針對在下面的評論你的問題,來定義隊列地址可以在<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

+0

非常感謝。那麼你的意思是說只有一項服務能夠完成發送和接收操作? –

+0

你在哪裏指定queuename,我需要聽? –

+0

查看我對該問題的更新 –