1

まず、関連するドキュメントが見つからなかったので、理論を尋ねたいと思います。Silverlight クライアントと WCF サービスがあります。それらの間の通信は、pollingDuplexHttpBinding を介して行われます。サーバーが、設定された MaxBufferSize および MaxReceivedMessageSize よりもサイズが大きいメッセージをクライアントに送信したいとします。その場合、舞台裏で何が起こっているのでしょうか?

さて、これがこの問題に関する私の実際の経験です: サーバー側のバインディング構成:

<binding name="eventServiceBinding" sendTimeout="00:00:10" inactivityTimeout="24:00:00" receiveTimeout="24:00:00" serverPollTimeout = "00:01:00"/>

大きい (つまり、上記のようにクライアントのバインディングのプロパティに設定された値よりも大きい) メッセージをサーバーからクライアントに送信します。次に、2番目の(大きくない)メッセージを送信します=> 2番目のメッセージの送信タイムアウトを取得しました(クライアントが最初のメッセージを受信したかどうかはわかりません)。最初のメッセージで何が起こるかを確認するために、役立つログを検索しようとしました。サーバー側 (WCF ロガーをアクティブ化) とクライアント側 (Fidler を使用) の両方で実行します。ログには特に興味深いものはありませんでした (ただし、正しい場所を検索しなかった可能性があります)。

さらに、sendTimeout が大きな値 (たとえば 10 分) に設定されている場合、サーバーからクライアントに送信されるすべての追加メッセージが「スタック」しているように見えます。クライアントが受信することはなく、送信タイムアウトに達するまで例外はスローされません。さらに、IIS をリセットするまで、クライアントとホスティング IIS アプリケーションによって公開されているサービスとの間の通信が機能しないという奇妙な現象が発生します。これがここで説明した以前の問題に関連しているとは言えませんが、100% 確信はありません。

クライアント側のバインディングで MaxBufferSize および MaxReceivedMessageSize プロパティを設定すると、両方の問題が解決するようです。

このような問題の経験があり、WCF 内の舞台裏で実際に何が起こっているかをここで教えてください。

4

0 に答える 0