このセクションでは、Windows Workflow Foundation または Windows Communication Foundation の BAM インターセプターを使用するときに発生する可能性がある既知の問題について説明します。
IIS でホストされている動的に生成された WCF アセンブリをインターセプトする
IIS を使用して埋め込み Windows Communication Foundation アプリケーション (アセンブリ ソースを指定するサービス ファイルなど) をホストする場合、WCF アセンブリは動的に生成され、任意のファイル名が割り当てられ、asp.net 一時フォルダーに配置されます。 インターセプター構成ファイルにはマニフェスト情報が必要であり、マニフェストを指定するためのワイルドカード文字やその他の動的メソッドはインターセプター構成ファイルでは使用できないので、サービスを再コンパイルしてからインターセプター構成ファイルをビルドするか、埋め込み WCF コードを含むすべての asp.net Web ページをデプロイした後でインターセプター構成ファイルを再デプロイする必要があります。
Windows Workflow Foundation での BAM インターセプターの使用は、Office および SharePoint Server ではサポートされていません
WF ランタイムを初期化するときに、Office と Windows Sharepoint Server の両方がアプリケーション構成ファイルから読み取りません。 その結果、WF の BAM インターセプターはアプリケーション用に構成できますが、これらの環境内でホストされている場合はワークフロー ランタイムに読み込まれません。
分散トランザクションの割り当て時にクライアント サービスがロックされる
サービス操作がクライアントによって開始されたトランザクションに参加せず、クライアントがトランザクション スコープのコンテキストからサービスを呼び出している場合、特に送信要求の前にクライアントから収集されたデータがあり、同じアクティビティの受信要求によってサービスからデータが収集されている場合は、デッドロックが発生する可能性があります。
このような状況を回避するには、次に示すように、クライアントの app.config ファイルの BAM 動作拡張機能のクライアント ConnectionString
属性で "Enlist = false" を宣言して、クライアントがトランザクションに参加しないように指定する必要があります。
<behavior name="bamClientBehavior">
<bamClientBehaviorExtension ConnectionString="Integrated Security=SSPI;Initial Catalog=BAMPrimaryImport;Data Source=.; Enlist=false" PollingIntervalSec="1500" />
</behavior>
BAM インターセプターが使用されているときにメッセージを送信する前に WCF チャネルを開く
BasicHttp バインディングで WCF に対して BAM インターセプターが有効になっている場合、プロキシはプロキシ.Open() を使用してチャネルを明示的に開く必要があります。 チャネルを明示的に開かないと、BAM インターセプトが例外で失敗する可能性があります。