次の方法で共有


WCF アダプターの既知の問題

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

受信 SOAP マーシャリング処理で失敗したメッセージが WCF 受信アダプターで中断されない

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

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

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

受信 SOAP マーシャリング処理で失敗したメッセージが WCF 送信アダプターで中断されない

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

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

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

54623ccf-49a9-4b6a-9487-da0d94bab64dWCF 送信アダプター の

非トランザクション WCF 受信場所でカスタム バインディングを使用する双方向トランスポートで OneWayBindingElement を使用すると、メッセージが失われる可能性があります

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

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

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

特性 説明 価値
配列最大長 許容される配列の最大長を指定する正の整数。 16384
maxBytesPerRead 読み取りごとに返される最大許容バイト数を指定する正の整数。 4096
maxDepth (最大深度) 読み取りごとに入れ子になったノードの最大深さを指定する正の整数。 32
maxNameTableCharCount テーブル名で使用できる最大文字数を指定する正の整数。 16384
maxStringContentLength XML 要素コンテンツで許可される最大文字を指定する正の整数。 8192

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

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

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

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

オーケストレーションで設定された WCF アクションは、静的送信ポートのアクション設定をオーバーライドしません

オーケストレーションでWCF.Actionコンテキスト プロパティを設定する場合、[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 キューにメッセージを送信する場合に発生する可能性があります。

この問題を解決するには、KB記事936512に記載されている .NET Framework 3.0 の修正プログラムをインストールする必要があります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. CustomeBindingElementhttpTransport を右クリックし、[拡張機能の削除] をクリックします。

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

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

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

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

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

BizTalk Server は、複数ホップの会話に ClientViaBehavior を使用する WCF クライアントでは機能しません

WCF クライアントは、呼び出し元のアプリケーションが必ずしも最終的な宛先を認識していない場合に、即時のネットワーク宛先がメッセージの目的のプロセッサではない場合に ClientViaBehavior を使用して、複数ホップの会話を有効にします。 ClientViaBehavior を指定し、[宛先] アドレスを 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