SAP システムのクライアント バインドを構成する

WCF クライアント クラスを生成したら、WCF クライアント (インスタンス) を作成し、そのメソッドを呼び出して、Microsoft BizTalk Adapter for mySAP Business Suite を使用できます。 SAP アダプターが公開する操作の WCF クライアント クラスとヘルパー コードを生成する方法については、「SAP ソリューション成果物の WCF クライアントまたは WCF サービス コントラクトを生成する」を参照してください。

WCF クライアントを作成するには、エンドポイント アドレスとバインドを指定する必要があります。 エンドポイント アドレスには有効な SAP 接続 URI が含まれている必要があり、バインドは SAP Binding (SAPBinding) のインスタンスである必要があります。 SAP 接続 URI の詳細については、「 SAP システム接続 URI の作成」を参照してください。

SAP バインディングとエンドポイント アドレスは、コードまたは構成ファイルで指定できます。 アダプター サービス参照の追加 Visual Studio プラグインを使用して WCF クライアント クラスを生成すると、プロジェクトの構成ファイル (app.config) も作成されます。 このファイルには、アダプター サービス参照の追加プラグインを使用して SAP システムに接続したときに指定したバインディング プロパティと接続情報 (資格情報を除く) を反映する構成設定が含まれています。

コードでのバインディングアドレスとエンドポイントアドレスの指定

次のコードは、コードでバインディングとエンドポイント アドレスを指定して WCF クライアントを作成する方法を示しています。 エンドポイント アドレスに指定された接続 URI ではなく、WCF クライアントの ClientCredentials プロパティを使用して SAP システム資格情報を指定することをお勧めします。

// A WCF client that targets an RFC is created  
// by using a binding object and endpoint address  
SAPBinding sapBinding = new SAPBinding();  
EndpointAddress sapAddress = new EndpointAddress("sap://CLIENT=800;LANG=EN;@a/YourSAPHost/00");  
  
RfcClient rfcClient = new RfcClient(sapBinding, sapAddress);  
  
rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
  
rfcClient.Open();  

構成ファイルでのバインディングとエンドポイント アドレスの指定

次のコードは、app.config ファイルでバインディングとエンドポイント アドレスを指定して WCF クライアントを作成する方法を示しています。

// A WCF client that targets an RFC is created  
// by specifying the client endpoint information in app.config  
RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
  
rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
  
rfcClient.Open();  

次の XML は、アダプター サービス参照プラグインの追加によって EMP テーブル用に作成された構成ファイルを示しています。 このファイルには、前の例で参照されているクライアント エンドポイント構成が含まれています。

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <sapBinding>  
                <binding name="SAPBinding" closeTimeout="00:01:00" openTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" receiveIdocFormat="Typed"  
                    generateFlatFileCompatibleIdocSchema="true" maxConnectionsPerSystem="50"  
                    enableConnectionPooling="true" idleConnectionTimeout="00:15:00"  
                    flatFileSegmentIndicator="SegmentDefinition" enablePerformanceCounters="false"  
                    autoConfirmSentIdocs="false"  
                    acceptCredentialsInUri="false" padReceivedIdocWithSpaces="false"  
                    enableBizTalkCompatibilityMode="false" />  
            </sapBinding>  
        </bindings>  
        <client>  
            <endpoint address="sap://CLIENT=800;LANG=EN;@a/YourSAPHost/00?RfcSdkTrace=False&AbapDebug=False&UseSapGui=Without"  
                binding="sapBinding" bindingConfiguration="SAPBinding" contract="Rfc"  
                name="SAPBinding_Rfc" />  
        </client>  
    </system.serviceModel>  
</configuration>  

プロジェクトに複数の WCF クライアントがある場合は、構成ファイルに複数のクライアント エンドポイント エントリが定義されます。 各 WCF クライアント エントリには、バインド構成とターゲット SAP システム成果物 (Rfc や Trfc など) に基づいて一意の名前が付けられます。たとえば、"SAPBinding_Rfc" などです。 プロジェクトで WCF クライアントを作成するために複数回接続する場合は、接続ごとに 1 つずつ、複数のバインド構成エントリが作成されます。 これらのバインド構成エントリには、SAPBinding1、SAPBinding2 などの方法で名前が付けられます。 特定の接続中に作成された各クライアント エンドポイント エントリは、その接続中に作成されたバインド エントリを参照します。

重要

SAP アダプターは、同じサービス コントラクトの異なる操作として、同じ種類の異なる SAP 成果物 (RFC、TRFC、IDOC など) を表示します。 たとえば、RFC_EXAMPLE_AとRFC_EXAMPLE_Bの 2 つの異なる RFC は、どちらも同じサービス コントラクト ("Rfc") で表示されます。 これは、両方の RFC が同じ WCF クライアント クラス RfcClient によって呼び出され、両方の RFC のパラメーターが同じ名前空間で宣言されることを意味します。 そのため、ソリューションのビルド時に名前空間の競合が発生しないように、同じアダプター サービス参照プラグインセッション (接続) 中に両方の RFC の WCF クライアントを生成する必要があります。

参照

WCF サービス モデルを使用して SAP アプリケーションを開発する
SAP ソリューション成果物の WCF クライアントまたは WCF サービス コントラクトを生成する
SAP システム接続 URI を作成する