WCF サービスの開発中に多くの時間を費やす最も簡単な領域の 1 つは、バインド構成です。まず、ソースコードリポジトリで、作業構成を宗教的にバックアップします。サービスの作成前に実行される構成ファイル自体の検証ルーチンを追加することもできます。
このような WCF の問題をデバッグする限り、ファイル、サービス、およびクライアントにマップされた TraceListener に書き込む古き良き Trace.WriteLine() に代わるものは実際にはありません。しかし、実際には、問題がかなり一般的であり、100% 構成に関連している可能性が高いことを考えると、バインディング設定、特にタイムアウトについて詳しく学ぶことをお勧めします。値を任意の大きな数値または Timeout.Infinite 数値 (文字列として) に設定します。これにより、文字通り WCF に無限のタイムアウトを許可するように指示されます。次に、バインディングをわずかに変更しただけでタイムアウトが発生するのはなぜか、自問してみてください。
特定の問題に関しては、Close() メソッドを明示的に呼び出してクライアント プロキシが適切に閉じられていないため、セッションが適切に終了されていない可能性があります。セッションレス バインディングを扱っている場合、これを回避できる可能性がありますが、プロキシを閉じない限り、セッションは解放されません。これの副作用は、通常 10 の同時セッションのデフォルトのサービス スロットリング値に達することです。セッションのライフ サイクルを理解したら、サービス コントラクトのメソッドの OperationContract 属性に指定できる IsInitiating、IsTerminating、および IsOneWay プロパティを調べることができます。
役立つリソースをいくつか紹介します。
OperationContract: (リンクしない奇妙な URL)
http://en.csharp-online.net/WCF_Services —OperationContract_Attribute
セッションの使用:
http://msdn.microsoft.com/en-us/library/ms733040.aspx
WCF セッション、インスタンス化、信頼できるメッセージングの便利なまとめ
http://www.pluralsight.com/community/blogs/aaron/archive/2006/02/27/19253.aspx
そして、Brian が述べたように、スロットリングの質問に対する私の回答:
WCF Service Throttling