You do not need to manually inject the queue listener into your service.
By simply creating a service contract, you specify a handler method that will be called when the message arrives in the queue.
You probably (or should) have something like this:
[OperationContract(IsOneWay = true, Action = "*")] void HandleMyMessage (MsmqMessage<String> message);
This ensures that the HandleMyMessage () method in your service implementation will be called upon message delivery.
UPDATE
In response to your question in the comment below, to determine the queue address, you can do this in the <System.ServiceModel> configuration:
<services> <service name="Microsoft.ServiceModel.Samples.OrderProcessorService" behaviorConfiguration="CalculatorServiceBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/> </baseAddresses> </host> <endpoint address="net.msmq://localhost/private/ServiceModelSamplesTransacted" binding="netMsmqBinding" contract="Microsoft.ServiceModel.Samples.IOrderProcessor" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services>
From here: http://msdn.microsoft.com/en-us/library/ms789032.aspx
tom redfern
source share