9

WCF サーバーは、変更について WCF クライアントにどのように通知しますか?も参照してください。(コメントや長いポーリングなど、単純なポーリングよりも優れたソリューション)

クライアント ファイアウォールを介して、WCF でプッシュ テクノロジを使用する必要があります。これは一般的な問題であるに違いなく、理論的には機能することを知っています (以下のリンクを参照)。

要件:

  • WCF
  • クライアントは、tcp ポート 80 (netTcpBinding) を介してサーバーに接続します。
  • サーバーは不規則な間隔 (1 分から数時間) で情報をプッシュバックします。
  • ユーザーがファイアウォールを構成する必要はありません。サーバーのプッシュは、すべての受信ポートが閉じられているファイアウォールを通過する必要があります。これには、同じ接続での TCP デュプレックスが必要です。クライアント ファイアウォールでポートを開く必要があるため、デュアル バインディングは機能しません。
  • クライアントは定期的に (おそらく 15 分ごとに) ハートビートをサーバーに送信するため、サーバーはクライアントがまだ生きていることを認識します。
  • サーバーは WAS を使用した IIS7 です。

解決策は二重 netTcpBinding のようです。この情報に基づいて:

ファイアウォールと NAT を介した WCF

IIS で接続を開いたままにする

しかし、動作するコード サンプルをまだ見つけていません。Microsoft の WCF サンプルから "Duplex" と "TcpActivation" のサンプルを組み合わせてみましたが、うまくいきませんでした。動作するサンプル コードを教えてください。または、小さなサンプル アプリを作成してください。どうもありがとう!

4

6 に答える 6

5

私はいくつかの解決策を見つけました:

商用オプション付きのZeroC Ice GPL。すぐにテストしただけです。.NET Remoting よりも強力に見え、非常に活発に開発されています。

RemObjects商用のアクティブな開発は、すべてをサポートしていますが、GenuineChannels が使用するより高度な機能をすべて備えているわけではないようです。

本物のチャンネル。多くの優れた追加機能を備えたリモート処理を使用します。最も重要な機能は、クライアント ファイアウォールを開く必要なく NAT を介して機能することです。残念ながら、非常に死んでいるようです。

この記事によると、別の解決策は IIS でストリーミングを使用することです: Keeping connections open in IIS

クライアントはポート 80 でサーバーへの最初の接続 (IIS6 では http、IIS7 では tcp) を確立し、接続は終了しないストリーミング応答で開かれたままになります。

これを実験する時間はありませんでしたし、ファイアウォールの問題を具体的に解決するというサンプルも見つかりませんでしたが、おそらく機能する優れたサンプルがあります: Streaming XML .

于 2008-10-15T08:32:34.547 に答える
2

見てみましたか: http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

すでに試みたものの例を挙げていただけますか? ファイアウォールなどの詳細、エラー メッセージは?

クライアントとサーバーの両方に直接対処でき、ファイアウォールが問題にならない場合は、サポートされているコントラクトを提供する URL をクライアントが登録できるようにすることを検討しましたか。その後、サーバーは必要なときにいつでもこのサービスを呼び出すことができ、長時間の実行 (ただしほとんどがアイドル状態の接続) を確立する必要がなく、ハートビートの必要性を回避し、セッション\接続全体で回復力を持たせることができます。

于 2008-10-13T21:43:33.437 に答える
1

これを試しましたか? DuplexHttpBinding

これは、カスタムWCFバインディングとしてカプセル化されたスマートポーリング技術を使用しています。したがって、箱から出してすぐに機能するはずです。

于 2009-10-23T00:58:32.103 に答える
1

私はあなたが話しているシナリオを試したことがないので、あまり助けにはなりません、ごめんなさい。バイパスする必要があるのがクライアントファイアウォールだけである場合は、この投稿を確認することをお勧めします。

幸運を。

于 2008-10-12T06:00:52.887 に答える
1

ほとんどのファイアウォール設定では、リソースを節約するために TCP 接続がアイドル状態の場合、TCP 接続はファイアウォールによって切断されます。アイドル タイムアウトは、おそらく制御できるものではありません。それらがアイドル状態で、リソース制限に達している場合、それらを破棄するものもあります。

とにかく、ほとんどの企業環境では、マシンがアウトバウンド TCP 接続を確立することを許可しません。

また、このメカニズムを使用すると、スケーリングの問題が発生することになります。より信頼できる解決策は、情報をキューに入れ、クライアントに定期的にポーリングさせることだと思います。可能な場合はキャッシングを利用して、後続のクライアント ポーリングが顧客のプロキシ キャッシュからキャッシュされたデータを取得するようにします (顧客がプロキシ キャッシュを使用している場合)。

タイムリーにデータをプッシュする必要がある場合 (金融サービスなど)、クライアント側の NServiceBus ディストリビューターなどのメッセージング インフラストラクチャを検討してください。

トレドを使ってみた?そこに表示されることを読んだので、ユーザーがセットアップするには複雑すぎる可能性があります。

于 2008-08-22T16:47:52.007 に答える
-1

ファイアウォールが有効なクライアントでデュプレックスWebサービスにアクセスするために、クライアントで次の変更を行うことができます。

  • [ファイアウォール]->[詳細設定]->[(ネットワーク接続設定の)設定]-> [Webサーバー(Http)]でチェックされているWebHttpオプションを設定します
于 2010-03-23T07:24:41.430 に答える