Macで「ブラウザ外」を実行するSilverlightクライアントがあります。このクライアントは、ポーリングデュプレックスバインディングを介してWCFサービスを利用します。
クライアントで、クライアント側のサービスを表すSystem.ServiceModel.DuplexClientBase派生物の「InnerChannel」プロパティによって公開された「Faulted」イベントをリッスンしています。
ちょうど1分後、この「障害」イベントがトリガーされ、その後、チャネルは機能しなくなります。つまり、サーバーがコールバックチャネルを介してメッセージを送信しようとすると、タイムアウト例外が発生します。
これが私が持っている理論です:クライアントの基礎となるポーリング操作には1分のタイムアウトがあると思われます。サーバー側では、pollingDuplexHttpBindingセクションのserverPollTimeoutプロパティが1分以上に設定されています。これは、サーバーが1分を超えてポーリング要求を保持していることを意味します。その間、サーバーはクライアントに何も通知しません。これにより、クライアントのポーリングメッセージのタイムアウトが明らかになったのではないかと思いました。私の理論をテストするために、serverPollTimeout設定を1分未満に減らしましたが、実際、問題は示されていません。
クライアント側には、PollingDuplexBindingElement.ClientPollTimeoutプロパティがあります。これは、このブログによると、クライアントに1分以上待機するように指示する設定です。この設定のデフォルトは5分で、明示的に設定したこともありますが、問題は解決しません(上記の回避策はありません)。
この問題は、ブラウザクライアント以外のMacでのみ発生することに注意してください。
要約すると、ここに私の質問があります:
- ここで問題が何であるかを正確に伝える説明的なエラーメッセージをどこでどのように見ることができますか?
- なぜそれはブラウザクライアントの外のMacでのみ起こるのですか?
- 誰かが私の理論を確認できますか?
- 私の理論が正しい場合、クライアントでポーリング要求のタイムアウトを実際に設定するにはどうすればよいですか?