サーバーでホストされている.Netサービスと、インターネット経由でこのサーバーに接続している.Netクライアントがあります。
クライアントがサービスのイベントをサブスクライブし、データが利用可能になったときにデータをプッシュできるパブリッシュサブスクライブモデルを実装したいと思います。別の方法は、クライアントにデータを求めてサーバーをポーリングさせることですが、これは必要なものに対して遅すぎる可能性があります。したがって、パブリッシュ/サブスクライブタイプの通信が必要です。
WCFバインディングWSDualHttpBindingでこれが可能になることは理解していますが、欠点があります。「ProgrammingWCFServices」の著者であるJuvalLowyによると、
... WSDualHttpBindingは、サービスをクライアントから分離するさまざまな通信バリアをトンネリングすることは事実上不可能であり、特定のWebサーバーマシンを見つける必要があるため、ほとんど使用できません。
これは、WSDualHttpBindingで動作するには、サーバーがコールバックするために、クライアントが(必要なルーター構成とともに)マシンのポートを開く必要があることを意味すると解釈しました(間違っている場合は訂正してください)。これが事実である場合、WSDualHttpBindingを使用することは私にとってオプションではありません。WindowsAzureの使用もオプションではありません。
したがって、私の質問の核心は、クライアントマシンのポートを開く必要なしに、インターネットを介してパブリッシュ/サブスクライブ/コールバックタイプの通信を実現するにはどうすればよいかということです。オープンスタンダードは問題ありませんが、クライアントとサーバーはどちらも.Netであるため不要であり、WindowsAzureはオプションではありません。