BAM WCF インターセプタと WF インターセプタに関する既知の問題
このセクションでは、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 でサポートされない
Office と Windows Sharepoint Server はいずれも、WF ランタイムを初期化するときにアプリケーション構成ファイルを読み込みません。 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 インターセプターを有効にすると、プロキシにより proxy.Open() が呼び出され、チャネルが明示的に開きます。 チャネルが明示的に開かない場合、BAM インターセプションに失敗し、例外が発生することがあります。