次の方法で共有


WCF アダプタに関する既知の問題

このトピックでは、BizTalk Serverに含まれる WCF アダプターの既知の問題について説明します。

受信 SOAP マーシャリング プロセスでエラーとなったメッセージが WCF 受信アダプターで中断されない

メッセージが WCF 受信アダプターに到着すると、WCF アダプターは受信 SOAP メッセージから BizTalk メッセージを作成し、この BizTalk メッセージをエンドポイント マネージャーによって管理されるトランスポート プロキシに渡します。 BizTalk メッセージの作成中にアダプターが SOAP エンベロープと本文の読み取りに失敗した場合でも、アダプターは非キャッシュで順方向専用の高速リーダーを使用して SOAP メッセージにアクセスするので、メッセージは中断されません。

失敗したメッセージのイベント ログを確認してください。 たとえば、[WCF アダプター トランスポートのプロパティ] ダイアログ ボックスの [ メッセージ ] タブで本文パス式を使用して、WCF アダプターを介して受信した SOAP メッセージから受信 BizTalk メッセージ本文を作成する方法を指定できます。 受信 SOAP メッセージの無効な本文パス式が [ メッセージ ] タブに指定されている場合、アダプターは BizTalk メッセージの作成に失敗し、受信メッセージを中断できません。 [ メッセージ ] タブで本文パス式を使用する方法の詳細については、「 WCF アダプターのメッセージ本文の指定」を参照してください。

次の図は、受信 SOAP メッセージ から受信 BizTalk メッセージを作成する方法を指定できる [メッセージ] タブを示しています。

受信 SOAP マーシャリング プロセスでエラーとなったメッセージが WCF 送信アダプターで中断されない

送信請求 - 応答の WCF 送信ポートは、WCF メッセージを応答メッセージとして受信できます。 メッセージが WCF 送信アダプターに到着すると、WCF アダプターは受信 SOAP メッセージから BizTalk メッセージを作成し、この BizTalk メッセージをエンドポイント マネージャーによって管理されるトランスポート プロキシに渡します。 BizTalk メッセージの作成中にアダプターが SOAP エンベロープと本文の読み取りに失敗した場合でも、アダプターは非キャッシュで順方向専用の高速リーダーを使用して SOAP メッセージにアクセスするので、メッセージは中断されません。

失敗したメッセージのイベント ログを確認してください。 たとえば、[WCF アダプタートランスポートのプロパティ] ダイアログ ボックスの [ メッセージ ] タブで XPath 式を使用して、WCF アダプターを介して受信した SOAP メッセージから受信 BizTalk メッセージ本文を作成する方法を指定できます。 受信 SOAP メッセージの無効な XPath 式が [ メッセージ ] タブで指定されると、アダプターは BizTalk メッセージの作成に失敗し、受信メッセージを中断できません。 [ メッセージ ] タブで XPath 式を使用する方法の詳細については、「 WCF アダプターのメッセージ本文の指定」を参照してください。

次の図は、WCF-NetNamedPipe 送信アダプターの [ メッセージ ] タブを例として示しています。

WCF 送信アダプターの [メッセージ] タブ

トランザクションではない WCF 受信場所においてカスタム バインドされた双方向トランスポートで OneWayBindingElement を使用すると、メッセージが失われることがある

双方向通信では、WCF アダプターは、メッセージ ボックス データベースにメッセージが保存されるまで応答を返します。 ただし、 OneWayBindingElement を 使用すると、受信したメッセージを WCF アダプターにディスパッチする直前にダミー応答が生成されます。 そのため、チャネル スタック内の OneWayBindingElement を使用してカスタム バインドを非トランザクション受信場所の双方向トランスポート用に構成すると、WCF アダプターが一方向の方法で受信メッセージを処理するため、メッセージが失われる可能性があります。

WCF-Custom および WCF-CustomIsolated トランスポート プロパティのダイアログ ボックスにある ReaderQuotas 属性の既定値が、バインドを構築するときに使用される

[WCF-Custom] ダイアログ ボックスと [WCF-CustomIsolated トランスポート プロパティ] ダイアログ ボックスでは、 ReaderQuotas 属性値が 0 として表示されます。 ただし、バインドを構築するときには、次の値が使用されます。

属性 説明
maxArrayLength 許容される配列の長さの最大値を指定する正の整数。 16384
maxBytesPerRead 読み取りごとに返される最大許容サイズ (バイト単位) を指定する正の整数。 4096
maxDepth 読み取りごとにネストされるノードの深さの最大値を指定する正の整数。 32
maxNameTableCharCount テーブル名に使用できる最大文字数を指定する正の整数。 16384
maxStringContentLength XML 要素のコンテンツに使用できる最大文字数を指定する正の整数。 8192

WCF アダプターの種類を変更し、同じアドレスを維持すると、WCF 受信場所が無効になる場合がある

アダプターの種類を変更した場合 (たとえば、WCF アダプターの種類を WCF-NetTcp から NetTcp Binding を使用して WCF-Custom に変更する)、同じアドレスを保持すると、エンドポイント マネージャーでのキャッシュの問題が原因で受信場所が無効になる可能性があります。 この問題を回避するには、次のいずれかを実行します。

  • BTSNTSvc サービスを再起動します。

  • URI を別のアドレスに変更し、保存してから、元のアドレスに戻して、再度保存します。

オーケストレーションの WCF アクション設定が静的送信ポートのアクション設定をオーバーライドしない

WCF を設定する場合 オーケストレーションのアクション コンテキスト プロパティは、WCF アダプターのトランスポートプロパティ ダイアログ ボックスの [アクション ] フィールドを空白のままにする必要があります。 静的送信ポートにもアクションを指定する場合は、 WCF。 オーケストレーションで設定したアクション コンテキスト プロパティは、静的送信ポートで設定した値によってオーバーライドされます。

エラー メッセージの伝達がトランザクション送信でサポートされない

送信請求応答送信ポートの [エラー メッセージの伝達 ] オプションを使用すると、送信処理に失敗したメッセージをサブスクライブしているアプリケーションにルーティングできます。 ただし、[トランスポートのプロパティ] ダイアログ ボックスで [トランザクションのチェックを有効にする] ボックスもオンになっている場合、エラー応答がアダプターに到着したときにトランザクションが中止されるか、使用できない場合は、サブスクライブしているアプリケーションにエラー メッセージを伝達することはできません。

クラスターのフェールオーバー時に、BizTalk ホストのクラスター リソース グループを再起動する前に MSMQ クラスター リソース グループを再起動する必要がある

フェールオーバー クラスターのシナリオでは、フェールオーバーが発生したとき、BizTalk ホストのクラスター リソース グループを再起動する前に MSMQ クラスター リソース グループを再起動する必要があります。 この操作を行わないと、MSMQ 受信場所が無効になる場合があります。 この問題を回避するには、BizTalk ホストのクラスター リソース グループが MSMQ クラスター リソース グループに従属するように設定して、BizTalk ホストのクラスター リソース グループより MSMQ クラスター リソース グループが先に起動するように指定できます。 または、BizTalk ホストのクラスター リソース グループを再起動して、この問題を回避することもできます。

エンドポイントで wsFederationHttpBinding を使用する WCF サービスにメッセージを送信すると、エラーが表示される

次のようなエラーが表示されます。

The adapter failed to transmit message going to send port "MySendPort" with URL "http://localohost/MywsFedHttp". It will be retransmitted after the retry interval specified for this Send Port. Details:"The channel is configured to use interactive initializer 'System.ServiceModel.Security.InfocardInteractiveChannelInitializer', but the channel was Opened without calling DisplayInitializationUI.  Call DisplayInitializationUI before calling Open or other methods on this channel.".

この動作は仕様です。 WCF アダプターは、エンドポイントで wsFederationHttpBinding を使用している WCF サービスにメッセージを送信できません。

BizTalk WCF サービス使用ウィザードで、WSDL からメッセージの種類またはポートの種類を選択できない

BizTalk WCF サービス使用ウィザードでは、WCF サービスをインポートするときに、WSDL からメッセージの種類またはポートの種類を選択できません。 この制限を回避するには、次のコードを使用してスキーマを取得し、必要なスキーマを BizTalk プロジェクトに追加します。

svcutil.exe /t:metadata http://service/metadataendpoint

BizTalk WCF サービス使用ウィザードで、一方向の操作と要求 - 応答操作の組み合わせを実行できない

BizTalk WCF サービス使用ウィザードでは、一方向の操作と要求 - 応答操作の組み合わせを持つポートの種類をインポートできません。 この問題を回避するには、ServiceModel メタデータ ユーティリティ ツールを使用して、ポートの種類を生成します。

BizTalk WCF サービス使用ウィザードで、WSDL を取得するときに証明書の資格情報を設定できない

BizTalk WCF サービス使用ウィザードでは、WSDL を取得するときに証明書の資格情報を設定することはできません。 これを回避するには、ServiceModel メタデータ ユーティリティ ツールを使用して、svcutil.exe.config ファイルに設定された証明書資格情報で使用する WCF サービスから WSDL ファイルと XSD ファイルを生成し、[メタデータ ソース] ページで [メタデータ ファイル (WSDL と XSD)] オプションを選択して BizTalk WCF サービス使用ウィザードにインポートします。

WCF アダプターが一方向の操作をサポートしない

IsOneWay プロパティがクライアント側で true に設定されている場合、WCF アダプターで発行された WCF サービス (WCF-NetMsmq 受信アダプターを除く) を使用すると、次のようなエラー メッセージが表示されます。 これは、WCF アダプターで発行された WCF サービスの System.ServiceModel.OperationContractAttribute.IsOneWay プロパティ (WCF-NetMsmq 受信アダプターで発行されたサービスを除く) が、一方向の受信場所であっても false に設定されているためです。

The channel received an unexpected input message while closing. Your Channel.Close() calls are not synchronized.

IsOneWay プロパティを true に設定して指定された WCF サービスを使用すると、次のようなエラー メッセージが表示されます。 BizTalk Serverから送信したメッセージは中断され、再開可能になります。

The request operation at net.tcp://localhost:8088/MyService/tcp did not receive a reply within timeout 00:01:00.

WCF-NetMsmq バインドを使用して、トランザクションではない MSMQ キューにメッセージを送信すると、メモリ リークが発生する場合がある

WCF-NetMsmq バインドを使用して、トランザクションではない MSMQ キューにメッセージを送信すると、BizTalk NT サービスでメモリ リークが発生する場合があります。 これは、WCF-NetMsmq トランスポートを使用してトランザクションではない MSMQ キューにメッセージを送信する場合、または WCF-Custom トランスポートで netMsmqBinding を使用してトランザクションではない MSMQ キューにメッセージを送信する場合に発生します。

この問題を解決するには、サポート技術情報の記事に記載されている .NET Framework 3.0 修正プログラムをインストールする必要があります936512。https://go.microsoft.com/fwlink/?LinkId=92962 この修正プログラムをインストールした後にシステムを再起動する必要はありませんが、WCF-NetMsmq バインドを使用する送信ポートをホストする BizTalk NT サービスは再起動する必要があります。

WCF-BasicHttp アダプターを使用して Apache Web サーバーと通信すると、例外が発生する場合がある

トランスポート セキュリティを備える WCF-BasicHttp アダプターを使用して Apache Web サーバーと通信すると、次のような例外が発生する場合があります。

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.
System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine

この問題を回避するには、次の手順に従って、WCF-BasicHttp アダプターではなく WCF-Custom アダプターを使用して Apache Web サーバーと通信する必要があります。

  1. 送信ポートを作成し、トランスポートの種類を WCF-Custom に設定します。

  2. [WCF-Custom トランスポートのプロパティ] ダイアログ ボックスの [バインド] タブで、[バインドの種類] ドロップダウン リストから [customBinding] を選択します。

  3. [ CustomeBindingElement] で httpTransport を右クリックし、[ 拡張機能の削除] をクリックします。

  4. [CustomeBindingElement] を右クリックし、[拡張機能の追加] をクリックします。

  5. [ バインド要素拡張機能の選択 ] ダイアログ ボックスで、[ httpTransport ] を選択し、[OK] をクリック します

  6. [httpTransport] をクリックし、[構成] ペインで keepAliveEnabled の値を False に設定します

  7. [textMessageEncoding] をクリックし、[構成] ペインで messageVersion の値を にSoap11WSAddressing10設定します。

  8. 必要に応じて、追加のプロパティを構成する必要があります。

複数ホップの交換に ClientViaBehavior を使用する WCF クライアントで BizTalk Server が動作しない

WCF クライアントでは、隣接するネットワーク宛先でメッセージを処理して複数ホップの交換を可能にする場合、呼び出し元のアプリケーションが最終的な宛先を認識する必要がないときには ClientViaBehavior を使用します。 ClientViaBehavior を指定し、To アドレスを BizTalk Server が仲介として機能するリモート サービスに設定すると、次のようなエラー メッセージが表示されます。

The message with To 'net.tcp://localhost:5555/test.svc' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree