2015-05-10 3 views
13

Vielleicht banne ich den falschen Baum - aber ich habe eine Reihe von Diensten (WebAPI und WCF), die WebSphere MQ verwenden, um mit anderen Systemen zu interagieren.WCF/WebService als Listener für MQ Message?

Das funktioniert ohne Problem - bis ich jetzt einen Weg von listening für Nachrichten in einer der Warteschlangen finden muss.

Ist das überhaupt möglich, oder muss ich die Windows Service Route herunterfahren?

+0

Dieser Link wird Ihnen helfen: http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q029950_.htm – Shashi

+1

@Shashi - ich kann nicht In der Dokumentation finden Sie Informationen zum Einrichten des WebSphere-Endgeräts als WCF-Dienst. – BlueChippy

+0

Der Link beschreibt die beiden Hosting-Optionen, die von MQ WCF - Self-hosted und Windows Service - unterstützt werden. – Shashi

Antwort

1

Ihr Problem kann in zwei verschiedene Elemente unterteilt werden:

  1. Wie MQ mit einem WCF-unterstützten Transport integrieren
  2. Wie ein WCF-Endpunkt über diesen Transport
aussetzen

Um das erste Problem zu beheben, sollten Sie sich die MQ-MSMQ bridge anschauen, die mit Host Integration Server bis Version 2009 (nicht R2) geliefert wird, was Ihnen ermöglicht, Nachrichten Deli zu haben Verteilt auf MQSeries-Warteschlangen, die an lokale MSMQs in Windows weitergeleitet werden. Obwohl dieses Feature deprecated ist, ist es wahrscheinlich der einfachste Weg, wenn Sie eine MSDN-Lizenz haben.

Eine andere Möglichkeit zur Behebung dieses Problems besteht darin, BizTalk-Server zu verwenden, der mit einem MQSeries-Adapter geliefert wird. Wenn Sie jedoch derzeit BizTalk in Ihrem Unternehmen verwenden, würde ich dies vermeiden.

Die letzte Möglichkeit besteht darin, direkt mit den MQSeries .NET-Clientbibliotheken oder über den XMS-Client zu programmieren.

Wenn Sie es schaffen, das erste Problem zu lösen, dann ist das Lösen des zweiten einfach. Sie können WCF-Dienstvorgänge in einer Richtung über Msmq-Transport bereitstellen, indem Sie netMsmqBinding (für WCF an beiden Enden) oder MsmqIntegrationBinding für Clients verwenden, die System.Messaging- oder native Msmq-COM-Bibliotheken verwenden.

Dieser In-Effekt fungiert als Listener-Dienst, wobei Nachrichten von der Dienstoperation verarbeitet werden.

4

Sie könnten einen Windows-Dienst schreiben, der ständig MQ Get in der Warteschlange aufruft und einen WCF-Dienst aufruft, um die Nachricht zu verarbeiten. Oder Sie könnten ein Triggerprogramm (eine Konsolenanwendung) schreiben, das MQ für Sie startet, wenn eine Nachricht eintrifft, die den WCF-Dienst aufruft.

+0

Ich schaue auch auf die Windows Service und MQ-Trigger-Optionen – BlueChippy

2

Ich bin vielleicht besser im googlen als du bist, aber ich habe anscheinend the answer here gefunden.

scheint, dass Sie die IBM Bindungskonfiguration laden möchten in Ihnen

<extensions> 
    <bindingElementExtensions> 
    <add name="IBM.XMS.WCF.SoapJmsIbmTransportChannel" 
      type="IBM.XMS.WCF.SoapJmsIbmTransportBindingElementConfig, IBM.XMS.WCF, Version=7.5.0.0, Culture=neutral, PublicKeyToken=8c7c0be90afcd8ba"/> 
    </bindingElementExtensions> 
</extensions> 

Dann app.config können Sie eine WebSphere WCF Bindung Config hinzuzufügen.

<bindings> 
    <customBinding> 
    <binding name="CustomBinding_WMQ"> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <IBM.XMS.WCF.SoapJmsIbmTransportChannel /> 
    </binding> 
    </customBinding> 
</bindings> 
+0

Danke - eine Sache, die ich noch nicht gefunden habe, ist, was ich auf der Websphere-Seite tun muss? z.B. Wie stelle ich es als Service dar? – BlueChippy

+0

Durch dieses gegangen und es ist das Gegenteil zu dem, was ich versuche zu tun! Dadurch kann ich mit JMS in MQ schreiben und dann die Antwort zurücklesen. Was ich möchte ist, die Warteschlange für eine andere Anwendung zu hören, um eine Nachricht zu schreiben, dann WCF Service verwenden, um die Nachricht zu verarbeiten. – BlueChippy