2008-08-22 9 views
7

は、私は、クライアントのファイアウォールを介しWCFでプッシュ技術を使用する必要がHow does a WCF server inform a WCF client about changes? (Better solution then simple polling, e.g. Coment or long polling)WCFはファイアウォールを介してクライアントにプッシュしますか?

も参照してください。これは一般的な問題でなければならず、実際には理論的にはうまくいきます(下記のリンクを参照)。しかし、私はそれを動作させることができず、それを示すコードサンプルを見つけることができませんでした。

要件:

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

解決策は、デュプレックスnetTcpBindingのようです。この情報に基づいて:

WCF through firewalls and NATs

Keeping connections open in IIS

しかし、私は作品のサンプルコードを見つけるためには至っていない..私は、MicrosoftのWCFサンプルから「両面」と「TcpActivation」のサンプルを組み合わせて試してみました運がない。誰かが、動作するサンプルコードを教えてもらえますか、小さなサンプルアプリケーションを作成してください。どうもありがとう!

+1

あなたは、例外のいずれかの種類に遭遇していますか?それは正確に何が働いていないのですか? – jrista

答えて

3

私はソリューションのカップルを見つけました。すぐにテストしただけです。 .NET Remotingよりも強力で、非常に積極的に開発されています。

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

GenuineChannels。それは、クライアントファイアウォールを開く必要なく、NATを介して動作している最も重要な機能がたくさん追加された素晴らしい機能を備えたリモーティングを使用します。残念ながら、非常に死んでいるようです。

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

クライアントがポート80でサーバへ(IIS6、IIS7でのTCPとHTTP)の最初の接続を行い、接続が続い保たれています終了しないストリーミングレスポンスで開く

私はこれを試す時間がありませんでした。ファイアウォール問題を具体的に解決するというサンプルは見つかりませんでしたが、ここではうまくいくでしょう:Streaming XML

+0

IIS上で接続を開いたままにしておくと、ワーカースレッドが不足していてもそれを速く実行することができます。私はIAsyncHttpHandlerを読んで、WCFから同じ機能を取得する方法をお勧めします。最悪の場合は投票する必要があります。 –

1

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

ほとんどの企業環境では、いずれのマシンでもアウトバウンドTCP接続を作成できません。

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

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

あなたはToredoを使ってみましたか?それがそこに現れると読んだことは、ユーザがセットアップするにはあまりにも複雑なことです。

1

あなたが話すシナリオを試していないので、あまりにも助けになることはできません。申し訳ありません。バイパスする必要があるのは、クライアントファイアウォールだけです。this postをチェックアウトしてください。

幸運。http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

あなたはすでに試みられているものの例を提供することができます。

2

は、あなたが見てみましたがありますか?ファイアウォールの詳細など、エラーメッセージ?

クライアントとサーバーの両方を直接アドレス指定でき、ファイアウォールに問題がない場合は、サポートされている契約を提供するURLをクライアントに登録させることを考慮しましたか。サーバーは、長期間(ただしほとんどがアイドル状態の接続)を確立する必要はなく、必要に応じてこのサービスを呼び出すことができ、ハートビートの必要性を回避し、セッション間で復元力を高めることができます。商業用オプション付き

ZeroC Ice GPL:

+0

はい、ファイアウォールでは機能しません。 – Sire

1

これを試しましたか? DuplexHttpBinding

カスタムWCFバインディングとしてカプセル化されたスマートポーリング手法を使用しています。だからそれは箱の外で動作するはずです。

-1

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

  • ファイアウォールでチェック設定WebHttpオプション - >詳細 - >(ネットワーク接続設定の)設定] - > [Webサーバー(HTTP)
+0

お客様のファイアウォールを変更することはできません。そして、ハードウェアのファイアウォールを持っていて、それが失敗した場合もあります。 – Sire

関連する問題