0

Macで「ブラウザ外」を実行するSilverlightクライアントがあります。このクライアントは、ポーリングデュプレックスバインディングを介してWCFサービスを利用します。

クライアントで、クライアント側のサービスを表すSystem.ServiceModel.DuplexClientBase派生物の「InnerChannel」プロパティによって公開された「Faulted」イベントをリッスンしています。

ちょうど1分後、この「障害」イベントがトリガーされ、その後、チャネルは機能しなくなります。つまり、サーバーがコールバックチャネルを介してメッセージを送信しようとすると、タイムアウト例外が発生します。

これが私が持っている理論です:クライアントの基礎となるポーリング操作には1分のタイムアウトがあると思われます。サーバー側では、pollingDuplexHttpBindingセクションのserverPollTimeoutプロパティが1分以上に設定されています。これは、サーバーが1分を超えてポーリング要求を保持していることを意味します。その間、サーバーはクライアントに何も通知しません。これにより、クライアントのポーリングメッセージのタイムアウトが明らかになったのではないかと思いました。私の理論をテストするために、serverPollTimeout設定を1分未満に減らしましたが、実際、問題は示されていません。

クライアント側には、PollingDuplexBindingElement.ClientPollTimeoutプロパティがあります。これは、このブログによると、クライアントに1分以上待機するように指示する設定です。この設定のデフォルトは5分で、明示的に設定したこともありますが、問題は解決しません(上記の回避策はありません)。

この問題は、ブラウザクライアント以外のMacでのみ発生することに注意してください。

要約すると、ここに私の質問があります:

  • ここで問題が何であるかを正確に伝える説明的なエラーメッセージをどこでどのように見ることができますか?
  • なぜそれはブラウザクライアントの外のMacでのみ起こるのですか?
  • 誰かが私の理論を確認できますか?
  • 私の理論が正しい場合、クライアントでポーリング要求のタイムアウトを実際に設定するにはどうすればよいですか?
4

1 に答える 1

0

マイクロソフトのサポートによるこれに関する長いスレッドの後、この問題に関する結論は次のとおりです。

  • この問題は、「通常の」WCF呼び出しにも関連しています。SL Mac OOBから通常のWCF操作を呼び出すと、タイムアウトがより高く設定されていても、正確に1分後にタイムアウトになります。
  • Microsoftは、60秒がMac OSのデフォルトのタイムアウトであり、SLクライアントコードがタイムアウトの変更に文書化されたSL APIを使用している場合でも、SLランタイムが必要なMacOSAPIを呼び出してそれをより高い値に設定しないことを確認しました。彼らは、サーバーが長いポーリングでもそれほど長くかかる可能性があるシナリオを認識していないため、「設計による」と言います
于 2012-08-06T10:58:59.300 に答える