1

nettcpbinding を使用した非同期 WCF サービスがあります。そして、それに一連のリクエストを送信し、コールバックで EndDoWork() を呼び出して結果を取得します。EndDonWork が 1 回例外をスローすると、その後のすべての呼び出しで例外がスローされます。通信オブジェクト System.ServiceModel.Channels.ServiceChannel は、Faulted 状態であるため、通信に使用できません。

最初の例外のために、それは接続を閉じるものだと思います。私の質問は次のとおりです。1.この動作を決定するものは何ですか? basicHttpBinding を使用すると、後の EndDoWork の呼び出しがうまく機能します。キープアライブのサポートと関係がありますか? 2. サービスの再接続を自動的に要求するように設定できる構成項目のプロパティはありますか?

4

3 に答える 3

2

チャネルの Faulted 状態は、これ以上信頼できないことを示します。例外がスローされた理由 (接続、サーバーの停止など) については言及していませんが、WCF に関する限り、エンドポイントは無効であるため、エラーが発生しています。

操作を続行するには、チャネルを再作成し、サービスに再度接続する必要があります。信頼できる接続などの機能を使用する場合、一部の作業は自動的に行われる可能性がありますが、最終的にチャネルに障害が発生した場合は、同じルールが適用されます。

また、チャネルに障害が発生したときに保留されていたメッセージを再要求するために、独自のメッセージ キューを実装する必要があります。メッセージの保持と再送信をチャネルに依存することはできません。

于 2011-06-17T05:46:25.100 に答える
1

MyDefinedFault クラスはどこにありますか。このクラスを定義する方法。

于 2009-06-10T15:11:32.710 に答える
1

私の記憶が正しければ、操作コントラクトで Fault を宣言すると、チャネルのフォルトを回避できます。

例えば:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [FaultContract(typeof(MyDefinedFault))]
    void Operation();
}

Operation コントラクトで MyDefinedFault を既に宣言しているため、サービスからそれをスローした場合、チャネルはエラーになりません (もちろん、System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults=true を使用していない限り、いずれにしてもチャネルにエラーが発生する可能性があります) )。

于 2009-04-18T18:26:29.683 に答える