クライアントに複数の IP アドレスがある場合の WCF サービスの問題

StackOverflow https://stackoverflow.com/questions/2464168

  •  20-09-2019
  •  | 
  •  

質問

IIS でホストされている WCF サービスとデスクトップ クライアントの通信で直面している問題を解決するために助けが必要です。

私のテストケースでやろうとしていること:

  1. サーバーは WSDualHttpBinding サービスをホストします
  2. クライアントは、クライアントの IP アドレスを含むコールバック URI を提供することで、これへの接続を確立します (Register メソッドを呼び出します)。
  3. 接続が確立されると、クライアント アプリケーションによって Web ページが起動されます。ユーザーはテキストボックスにテキストを入力し、「送信」をクリックします。Web ページは、登録されているすべてのデスクトップ クライアントにテキストを送信します。

問題:

ステップ 2 では、PC に複数の IP アドレス (イーサネット アダプター、ループバック アダプターなど) がある場合があります。登録呼び出し中に、このリストの IP がサーバーからコールバックできないコールバック URL で送信された場合 (例:ループバック アダプター IP)、タイムアウト例外がスローされます。このような試行を数回繰り返すと、サーバーは (有効な IP かどうかに関係なく) クライアントからの呼び出しを受け入れることができなくなります。場合によっては、「サーバーがビジー状態」という例外がスローされることがありました。

(DNS/WINS 構成の問題によりサーバーがマシン名を正しい IP アドレスに解決しないため、コールバック URI でマシンの完全修飾名を使用できません)。

再現方法:
a.IIS 上でサーバーを公開します。複数の IP アドレスを持つ別のマシンからクライアントを実行します。クライアントは、3回の試行b後にタイムアウトの例外をスローし、プログラムを終了します。App.Config のパラメータを使用すると、正しい IP アドレス (使用する IP) を入力できます。これでプログラムが起動すると、すべてが正常に動作します。
c.上で指定したこの IP アドレスを削除して、間違った IP が使用されると、再びステップ a が発生します。このモードでプログラムを 2 ~ 3 回実行します。
d.ステップ b と同様に変更を加え、プログラムを実行します。時々タイムアウト例外が発生します。また、Web サイトが表示されることもあります。ただし、テキストを入力して送信しても、それはクライアントに届きません。(Web サービスが呼び出しを受信しなかった場合でも、 register メソッドは機能しました。Web サービスに登録されたクライアントがないため、送信機能は失敗します。

なぜこれが起こるのか、そしてそれにどう対処すればよいのかわかりません。これが私のVisual Studioソリューションです - http://bit.ly/atKfOS

ご意見、ご感想をお待ちしております。環境:サーバー - Windows XP (IIS 5)、Windows Server 2008 SP2 x64 (IIS 7)、クライアント:Windows XP

GCに感謝します

役に立ちましたか?

解決

まあ、私は主な問題は、このですね:サーバは、クライアントに呼び出そうとして失敗した場合、両者の間のチャネルは、「障害の発生」になり、無用

ただドン - (それをログに記録し、SOAPフォルトにそれを回す、それをキャッチしたり、正常なサーバのタイムアウト例外を扱う - - 何でも、このようなイベントが発生した後、

は、クライアント側プロキシを配置し、それを再作成する必要がありt)はフィルタリングされていない.NET TimeoutExceptionが、これは、チャネルを障害し、クライアントに戻す渡すことができます。

などTimeoutExceptionが発生した場合、あなたのサーバ側で何をしますか?あなたは

??チャンネルまでのすべての方法がわからない、その例外までバブルに作るのですか
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top