2

WCFで問題が発生したときに何が起こるかを理解しようとしているだけです。PerSession の InstanceContextMode で宣言されたサービス コントラクトの実装があります...

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]

呼び出しは次のように行われます。

  1. 私のクライアントはサーバーを呼び出し、GetServerUTC() を呼び出してサーバーの現在の UTC 時刻を返します。これは一方向の呼び出しであり、サーバーはクライアントの準備ができたときにコールバックします (この場合、単純に現在の時刻を返すのは簡単です!)

  2. サーバーはクライアントにコールバックし、クライアントのコールバック実装でテスト目的で例外をスローします。

  3. これはクライアントで (テスト目的で) 処理されず、クライアントがクラッシュして終了します。

  4. サーバー上で、ICommunicationObject の faulted イベント ハンドラーを処理します...

    obj.Faulted += 新しい EventHandler(EventService_Faulted);

質問...

  • これにより、サーバー上の現在の接続のセッションが強制終了されますか。

  • このメソッドで必要なこと、たとえばロギングなどを自由に行うことができると思いますが、セッションを終了するためにここで特定のことを行う必要がありますか、それとも WCF がこれを処理しますか?

ベスト プラクティスの観点から、コールバックが失敗した場合はどうすればよいですか? それは「あなたのクライアントで何かが起こった」という意味ですか?

さらに、私が処理する必要がある他の障害のあるハンドラーはありますか。

私はWCFについて多くのことを読んできましたが、何か問題が発生したときに何をすべきかについて漠然としているようです。現在、接続を管理し、サーバーへの接続が存在するかどうかに応じてユーザーアクションが発生するかどうかを判断するステートマシンをクライアントに実装しています-またはこれはやり過ぎです。

どんなヒントでも歓迎です;)

4

1 に答える 1

0

セッションの設定に従って、セッションがタイムアウトすることがわかりました。不思議なことに、一度障害が発生すると、クライアントは同じセッションで他のメソッドを呼び出すことができることに気付きました。

于 2010-03-31T15:15:38.963 に答える