次の方法で共有


SAP アダプターを使用した WCF チャネル モデルの概要

SAP システムで RFC、tRFC、または BAPI を呼び出したり、IDOCS を SAP システムに送信したりするために、コードは WCF クライアントとして機能し、送信操作をアダプターに送信します。 WCF チャネル モデルでは、チャネル経由で要求メッセージを送信することで、コードによってアダプターに対する操作が呼び出されます。

SAP システムに対して tRFC または RFC サーバーとして機能するために、コードは WCF サービスとして動作します。 つまり、アダプターは、RFC や ReceiveIdoc 操作 (SAP システムから文字列形式で IDOC を受信する) などの受信操作をコードで呼び出します。 このシナリオでは、コードはアダプターからチャネル経由で操作の要求メッセージを受信します。

このセクションのトピックでは、WCF チャネル モデルで SAP アダプターを使用する方法の概要について説明します。

WCF チャネル モデルの概要

クライアントとサービスは、SOAP メッセージを交換して通信します。 WCF チャネル モデルは、このメッセージ交換の低レベルの抽象化です。 チャネル スタックと呼ばれる階層化されたプロトコル スタックを使用してメッセージを送受信できるようにするインターフェイスと型が提供されます。 スタックの各レイヤーはチャネルで構成され、各チャネルは WCF バインディングから作成されます。 最も低いレイヤーはトランスポート チャネルです。 トランスポート チャネルは、サービスとクライアントの間の基になるトランスポート メカニズムを実装し、各メッセージを上位のレイヤー (および最終的には使用するアプリケーション) に System.ServiceModel.Message として表示します。 WCF Message クラスは、SOAP メッセージの抽象化です。 WCF には、要求/応答や一方向などの基本的な SOAP メッセージ交換パターンをモデル化するチャネル 図形と呼ばれるいくつかのチャネル インターフェイスが用意されています。 WCF トランスポート バインドは、上位レイヤーがメッセージの送受信に使用できる 1 つ以上のチャネル図形の実装を提供します。 WCF チャネル モデルの詳細については、「 チャネル モデルの概要」を参照してください。

SAP アダプターは、WCF サービスとして SAP システムを公開する WCF カスタム トランスポート バインドです。

SAP アダプターでサポートされているチャネル図形

アダプターは、次の WCF チャネル図形を実装します。

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel)。 IRequestChannel インターフェイスは、要求/応答メッセージ交換のクライアント側を実装します。 IRequestChannel を使用して、応答を使用する操作 (たとえば、データを返す SAP システムで RFC を呼び出す) を実行できます。

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel)。 この図形は、一方向メッセージ交換のクライアント側を実装します。 IOutputChannel を使用して、応答を使用する必要のない操作を呼び出すことができます。たとえば、データを返さない SAP システムで RFC を呼び出す場合などです。

  • IReplyChannel (System.ServiceModel.Channels.IReplyChannel)。 この図形は、要求/応答メッセージ交換のサービス側を実装します。 IReplyChannel を使用して、RFC または tRFC サーバーを実装したり、SAP システムから IDOC を受信したりできます。

    WCF バインドと同様に、SAP アダプターはファクトリ パターンを使用して、アプリケーション コードにチャネルを提供します。 Microsoft.Adapters.SAPBinding オブジェクトを使用して、次のインスタンスを作成します。

  • System.ServiceModel.ChannelFactory<アダプターで要求/応答操作を呼び出すために使用できる IRequestChannel チャネルを提供する IRequestChannel>

  • System.ServiceModel.ChannelFactory<IOutputChannel> アダプターで一方向操作を呼び出すために使用できる IOutputChannel チャネルを提供します。

  • System.ServiceModel.IChannelListener<IReplyChannel> :アダプターから要求/応答操作を受信するために使用できる IReplyChannel チャネルを提供します。

WCF チャネル モデルでの SAP アダプターのメッセージの作成

WCF では、 System.ServiceModel.Channels.Message クラスは、SOAP メッセージのメモリ内表現を提供します。 Message インスタンスを作成するには、静的な Message.Create メソッドを呼び出します。

SOAP メッセージには、SAP アダプターに送信する メッセージ インスタンスを構築するときに指定する必要がある重要な部分が 2 つあります。

  • メッセージ アクションは、SOAP メッセージ ヘッダーの一部である文字列です。 メッセージ アクションは、SAP アダプターで呼び出す必要がある操作を識別します。 SAP システムで RFC SD_RFC_CUSTOMER_GETを呼び出すために指定されたメッセージ アクションを次に示します。 http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET

  • メッセージ本文には、操作のパラメーター データが含まれています。 メッセージ本文は、要求された操作に対して SAP アダプターによって予期されるメッセージ スキーマに対応する整形式 XML で構成されます。 次のメッセージ本文には、SAP システムのSD_RFC_CUSTOMER_GET RFC のパラメーターが含まれています。

    <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>  
    

    操作の SAP アダプター メッセージ スキーマとメッセージ アクションの詳細については、「 BizTalk Adapter for mySAP Business Suite のメッセージとメッセージ スキーマ」を参照してください。

    Message.Create メソッドはオーバーロードされ、メッセージ本文を提供するためのさまざまなオプションを提供します。 次のコードは、System.Xml を使用して Message インスタンスを作成する方法を示しています メッセージ本文を指定する XmlReader。 このコードでは、メッセージ本文が文字列定数から読み取られます。

//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);  

重要

Message インスタンスにメッセージ アクションを指定する必要があります。 これは通常、 Message インスタンスの作成時に行われます。

WCF チャネル モデルでの SAP アダプターでのストリーミング サポート

SAP アダプターと交換するメッセージを作成して使用する方法によって、コードとアダプターの間でメッセージがどのようにストリーミングされるかが決まります。

ノード ストリーミング

ノード ストリーミングは、SendIdoc 操作と ReceiveIdoc 操作を除くすべての操作でサポートされるストリーミングの唯一のレベルです。

メッセージのノード ストリーミングを実行するには、次の操作を行います。

  • XmlReader を使用して送信メッセージを作成し、メッセージ本文を指定します。

  • XmlReader を使用して受信メッセージを使用します。 リーダーを取得するには、受信メッセージで GetReaderAtBodyContents メソッドを呼び出 します

ノード値ストリーミング

SendIdoc 操作と ReceiveIdoc 操作には、1 つの XML ノード (<idocData>) の下の文字列に IDOC データが含まれているため、アダプターはこれらの操作でノード値ストリーミングをサポートします。

これらの操作に対してノード値ストリーミングを実行するには、次の操作を行います。

  • メッセージ本文を提供するノード値ストリーミングを実装する BodyWriter を使用して、SendIdoc 要求メッセージ (送信) を作成します。

  • ノード値ストリーミングを実装する XmlDictionaryWriter を使用して、メッセージの WriteBodyContents メソッドを呼び出して ReceiveIdoc 要求メッセージ (受信) を使用します。

    WCF チャネル モデルを使用してフラット ファイル (文字列) IDOC をストリーミングする方法の詳細については、「WCF チャネル モデルを 使用して SAP で IDOC Flat-File ストリーミングする」を参照してください。

参照

WCF チャネル モデルを使用してアプリケーションを開発する