Freigeben über


Übersicht über das WCF-Kanalmodell mit dem SAP-Adapter

Um RFCs, tRFCs oder BAPIs auf einem SAP-System aufzurufen oder IDOCS an ein SAP-System zu senden, fungiert Ihr Code als WCF-Client und sendet ausgehende Vorgänge an den Adapter. Im WCF-Kanalmodell ruft Ihr Code Vorgänge für den Adapter auf, indem eine Anforderungsnachricht über einen Kanal gesendet wird.

Um als tRFC- oder RFC-Server für ein SAP-System zu fungieren, verhält sich Ihr Code als WCF-Dienst. Das heißt, der Adapter ruft einen eingehenden Vorgang für Ihren Code auf, z. B. einen RFC-Vorgang oder den ReceiveIdoc-Vorgang (um ein IDOC im Zeichenfolgenformat von einem SAP-System zu empfangen). In diesem Szenario empfängt Ihr Code eine Anforderungsmeldung für den Vorgang über einen Kanal vom Adapter.

Die Themen in diesem Abschnitt bieten eine Übersicht über die Verwendung des SAP-Adapters mit dem WCF-Kanalmodell.

Übersicht über das WCF-Kanalmodell

Clients und Dienste kommunizieren durch den Austausch von SOAP-Nachrichten. Das WCF-Kanalmodell ist eine Abstraktion dieses Nachrichtenaustauschs auf niedriger Ebene. Es bietet Schnittstellen und Typen, mit denen Sie Nachrichten mithilfe eines mehrschichtigen Protokollstapels namens Kanalstapel senden und empfangen können. Jede Schicht des Stapels besteht aus einem Kanal, und jeder Kanal wird aus einer WCF-Bindung erstellt. Auf der niedrigsten Ebene befindet sich der Transportkanal. Der Transportkanal implementiert den zugrunde liegenden Transportmechanismus zwischen einem Dienst und einem Client und stellt jede Nachricht den höheren Ebenen (und letztendlich der verbrauchenden Anwendung) als System.ServiceModel.Message dar. Die WCF Message-Klasse ist eine Abstraktion einer SOAP-Nachricht. WCF stellt mehrere Kanalschnittstellen bereit, die als Kanalformen bezeichnet werden und die die grundlegenden SOAP-Nachrichtenaustauschmuster modellieren, z. B. Anforderungsantwort oder Unidirektionale. Eine WCF-Transportbindung stellt eine Implementierung von mindestens einer Kanalform bereit, die höhere Ebenen zum Senden und Empfangen von Nachrichten verwenden können. Weitere Informationen zum WCF-Kanalmodell finden Sie unter Übersicht über das Kanalmodell.

Der SAP-Adapter ist eine benutzerdefinierte WCF-Transportbindung, die ein SAP-System als WCF-Dienst verfügbar macht.

Unterstützte Kanalformen für den SAP-Adapter

Der Adapter implementiert die folgenden WCF-Kanalformen:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel). Die IRequestChannel-Schnittstelle implementiert die Clientseite eines Nachrichtenaustauschs zwischen Anforderung und Antwort. Sie können einen IRequestChannel verwenden, um Vorgänge auszuführen, für die Sie eine Antwort nutzen möchten, z. B. zum Aufrufen eines RFC im SAP-System, das Daten zurückgibt.

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Dieses Shape implementiert die Clientseite eines unidirektionalen Nachrichtenaustauschs. Sie können einen IOutputChannel verwenden, um einen Vorgang aufzurufen, für den Sie keine Antwort verwenden müssen, z. B. um einen RFC auf dem SAP-System aufzurufen, der keine Daten zurückgibt.

  • IReplyChannel (System.ServiceModel.Channels.IReplyChannel). Dieses Shape implementiert die Dienstseite eines Nachrichtenaustauschs zwischen Anforderung und Antwort. Sie können einen IReplyChannel verwenden, um einen RFC- oder tRFC-Server zu implementieren oder IDOCs von einem SAP-System zu empfangen.

    Wie jede WCF-Bindung verwendet auch der SAP-Adapter ein Factorymuster, um Kanäle für Anwendungscode bereitzustellen. Sie verwenden ein Microsoft.Adapters.SAPBinding-Objekt , um Instanzen von zu erstellen:

  • System.ServiceModel.ChannelFactory<IRequestChannel> zum Bereitstellen von IRequestChannel-Kanälen , die Sie zum Aufrufen von Anforderungsantwortvorgängen auf dem Adapter verwenden können.

  • System.ServiceModel.ChannelFactory<IOutputChannel> zum Bereitstellen von IOutputChannel-Kanälen , mit denen Sie unidirektionale Vorgänge für den Adapter aufrufen können.

  • System.ServiceModel.IChannelListener<IReplyChannel> zum Bereitstellen von IReplyChannel-Kanälen , die Sie zum Empfangen von Anforderungsantwortvorgängen vom Adapter verwenden können.

Erstellen von Nachrichten für den SAP-Adapter im WCF-Kanalmodell

In WCF stellt die System.ServiceModel.Channels.Message-Klasse eine Im-Arbeitsspeicher-Darstellung einer SOAP-Nachricht bereit. Sie erstellen eine Nachricht instance, indem Sie die statische Message.Create-Methode aufrufen.

Es gibt zwei wichtige Teile der SOAP-Nachricht, die Sie angeben müssen, wenn Sie eine Nachricht erstellen, instance an den SAP-Adapter gesendet werden soll.

  • Die Nachrichtenaktion ist eine Zeichenfolge, die Teil des SOAP-Nachrichtenheaders ist. Die Meldungsaktion identifiziert den Vorgang, der auf dem SAP-Adapter aufgerufen werden soll. Im Folgenden wird die Meldungsaktion angezeigt, die angegeben wird, um den SD_RFC_CUSTOMER_GET RFC auf einem SAP-System aufzurufen: http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET.

  • Der Nachrichtentext enthält die Parameterdaten für den Vorgang. Der Nachrichtentext besteht aus wohlgeformten XML-Daten, die dem vom SAP-Adapter für den angeforderten Vorgang erwarteten Nachrichtenschema entsprechen. Der folgende Nachrichtentext enthält die Parameter für die SD_RFC_CUSTOMER_GET RFC auf einem SAP-System.

    <SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>  
    

    Informationen zu den Nachrichtenschemas des SAP-Adapters und Nachrichtenaktionen für Vorgänge finden Sie unter Nachrichten und Nachrichtenschemas für Den BizTalk-Adapter für mySAP Business Suite.

    Die Message.Create-Methode ist überladen und bietet viele verschiedene Optionen zum Bereitstellen des Nachrichtentexts. Im folgenden Code wird veranschaulicht, wie Sie mithilfe einesSystem.Xml eine instance erstellen . XmlReader, um den Nachrichtentext anzugeben. In diesem Code wird der Nachrichtentext aus einer Zeichenfolgenkonstante gelesen.

//create an XML message to send to the SAP system  
//We are invoking the SD_RFC_CUSTOMER_GET RFC.  
//The XML below specifies that we want to search for customers with names starting with "AB"  
string inputXml = "<SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>";  
  
//create an XML reader from the input XML  
XmlReader reader = XmlReader.Create(new MemoryStream(Encoding.Default.GetBytes(inputXml)));  
  
//create a WCF message from the XML reader  
Message inputMessge = Message.CreateMessage(MessageVersion.Soap11, "http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET", reader);  

Wichtig

Sie müssen eine Nachrichtenaktion in Ihrer Nachricht instance bereitstellen. Dies geschieht in der Regel, wenn die nachricht instance erstellt wird.

Streamingunterstützung für den SAP-Adapter im WCF-Kanalmodell

Wie Sie die Nachrichten erstellen und nutzen, die Sie mit dem SAP-Adapter austauschen, bestimmt, wie die Nachricht zwischen Ihrem Code und dem Adapter gestreamt wird.

Knotenstreaming

Knotenstreaming ist die einzige Streamingebene, die für alle Vorgänge mit Ausnahme der Vorgänge SendIdoc und ReceiveIdoc unterstützt wird.

Um das Knotenstreaming für eine Nachricht durchzuführen, führen Sie Folgendes aus:

  • Erstellen Sie eine ausgehende Nachricht mit einem XmlReader , um den Nachrichtentext anzugeben.

  • Verwenden Sie eine eingehende Nachricht mithilfe eines XmlReader. Sie erhalten den Leser, indem Sie die GetReaderAtBodyContents-Methode für die eingehende Nachricht aufrufen.

Knotenwert-Streaming

Da die Vorgänge SendIdoc und ReceiveIdoc die IDOC-Daten in einer Zeichenfolge unter einem einzelnen XML-Knoten (<idocData>) enthalten, unterstützt der Adapter das Streaming von Knotenwerten für diese Vorgänge.

Zum Ausführen des Knotenwertstreamings für diese Vorgänge können Sie Folgendes ausführen:

  • Erstellen Sie die SendIdoc-Anforderungsnachricht (ausgehend) mit einem BodyWriter , der das Knotenwertstreaming implementiert, um den Nachrichtentext zu liefern.

  • Nutzen Sie die ReceiveIdoc-Anforderungsnachricht (eingehend), indem Sie die WriteBodyContents-Methode für die Nachricht mit einem XmlDictionaryWriter aufrufen, der das Knotenwertstreaming implementiert.

    Weitere Informationen zum Streamen von Flatfile-IDOCs (Zeichenfolgen)-IDOCs mithilfe des WCF-Kanalmodells finden Sie unter Streaming Flat-File IDOCs in SAP mithilfe des WCF-Kanalmodells.

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Kanalmodells