2017-03-09 10 views
1

WCFサービスを使用するWPFアプリケーションがあります。サービスインスタンスコンテキストモードはPerSessionに設定されます。サービスでは、外部キューから受信したメッセージを送信するクライアントへのコールバックを持つメソッドがあります。WCF - 廃棄オブジェクトにアクセスできない

新しいサービスを開始してアプリケーションを実行すると、すべて正常に動作し、コールバックチャネルはオープン状態になります。アプリケーションを閉じて再度実行すると、コールバックは常に「配置されたオブジェクトにアクセスできません」というエラーをスローし、Closed状態になります。

サービスフォームクライアント側に接続するには、アプリケーションチャネルを閉じた後にDuplexChannelFactoryを使用し、チャネルファシリティが破棄されます。クローズイベントとクローズイベントが呼び出されたことをログで確認できます。多分サービスが最後のセッションを保持していると思った。あるいは、アプリケーションを再実行すると、それは閉じられた同じチャンネルに接続する。私はセッションIDをチェックして、彼らは異なっています。 UUidは同じです。

クライアントアプリケーションが再起動後に同じチャネルを使用しているようです。サービスサイドキャッシングはチャネルについて何かをキャッシングしていますか?

十分な説明をいただきたいと思います。必要に応じてより多くの情報を提供します。任意のアイデアはどのようにこの問題を解決するには?私は、問題がアプリケーションプールがすべての要求後にリサイクルさせ、インターネットインフォメーションサービス(IIS)アプリケーションプール、あまりにも限定された「要求の制限」であることが判明し、同様のエラーを経験している

おかげ

+0

エラーがWCFサービス自体から発生していないことを確認しましたか?おそらく、次の接続で例外が発生する最初の切断後に、WCFサービス内で何かが起きている可能性があります。また、WCFサービスの初期化時にエラーが発生しているのですか、実際に関数を呼び出そうとしていますか? –

+0

完全なスタックトレースがありますか? –

+0

この動作は仕様です。コールバックチャネルは、クライアントが終了すると終了します。 –

答えて

0

。 「リクエストの制限」値を0(つまり無制限)またはそれ以上の数に変更するだけで問題は解決されました。

  1. オープンIISマネージャ: "要求の制限" を変更する

  2. ホストマシンを展開し、[アプリケーションプール]をクリックします。
  3. Webサービスを実行しているアプリケーションプールを右クリックし、コンテキストメニューから[詳細設定]を選択します。
  4. 「リサイクル」セクションまでスクロールし、「リミット制限」を見つけます。
  5. 新しい「リクエスト制限」を指定します。
  6. [OK]をクリックします。
関連する問題