2

WS バインディングを使用している WCF サービスで奇妙な問題が発生しています。セッションなし(セキュリティ/信頼性)で構成すると、問題なく動作しますが、セッションではそうではありません。たとえば、セキュリティ (メッセージ セキュリティ、Windows 資格情報) を構成すると、10 回目または 11 回目の呼び出し後にタイムアウトが発生します。私のサービスは別の WCF サービスを呼び出しますが、両方のサービスが同じバインディング パラメーターで構成されています。

このような問題をどのようにデバッグしますか? トレースをオンにして SvcTraceViewer を使用する以外に、どのツールを使用しますか?

4

4 に答える 4

3

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

于 2009-02-14T08:18:33.617 に答える
1

このようなシナリオをデバッグする最善の方法は、WCF サービス/クライアントでトレースを有効にすることです。トレーサーは、組み込みのトレース ビューアーを使用して読み取ることができるログ ファイルを作成します。 http://msdn.microsoft.com/en-us/library/ms733025.aspx

于 2009-02-13T16:56:07.453 に答える
0

クライアントからプロキシで.Close()メソッドを呼び出すことを忘れないでください。

于 2011-04-03T08:45:23.223 に答える
0

スロットルを踏んでいるように聞こえます...

WCF サービスのスロットリング

http://kennyw.com/indigo/150

于 2009-02-13T18:48:25.233 に答える