Вам не нужно вручную внедрять прослушиватель очереди в вашем сервисе.
Просто создавая контракт на обслуживание, вы указываете метод-обработчик, который будет вызываться при поступлении сообщения в локальную очередь.
Вы, вероятно, (или должны) иметь что-то вроде этого:
[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