2011-10-12 15 views
7

¿Alguien sabe cómo implementar MSMQ Oyentes * usando WCF *?MSMQ Oyentes que utilizan WCF

+0

Puede serás más específico? – Xhalent

+0

Mucha información sobre SO sobre esto: 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

Tengo 2 servicios wcf integrados, 1 para enviar datos a la cola MSMQ y otro es invocado por MSMQ listener cuando hay una inserción en MSMQ queue.Now Quiero saber cómo y dónde necesito escribir este oyente de MSMQ. –

Respuesta

0

La vinculación MSMQ es posible en WCF. Puede consultar el http://blogs.msdn.com/b/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx para obtener más información.

+0

obtuve ese enlace previamente de todos modos gracias por su interés. Solo quiero saber cómo debemos llamar al servicio wcf que está teniendo netmsmqbinding ? –

+0

¿Está intentando implementar algo diferente de lo que se describe en ese enlace? El artículo también contiene un código de muestra. – Kangkan

3

No necesita implementar manualmente un escucha de cola en su servicio.

Simplemente al crear su contrato de operación de servicio está especificando el método de manejo que será invocado cuando llegue un mensaje a la cola.

Probablemente (o debería) tener algo como esto:

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

Esto asegurará que el método HandleMyMessage() en su implementación del servicio se llamará cuando se entrega un mensaje.

ACTUALIZACIÓN

En respuesta a su pregunta en el comentario a continuación, para definir la dirección de la cola se puede hacer esto en la configuración <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> 

A partir de aquí: http://msdn.microsoft.com/en-us/library/ms789032.aspx

+0

Muchas gracias Hugh. Entonces, ¿quiere decir que solo un servicio cumple con las operaciones de envío y recepción, verdad? –

+0

¿Dónde se especifica el nombre de la cola, a la que debo escuchar? –

+0

Ver mi actualización a la pregunta –