以前の回答をすべて削除して、少し「洗練」する必要がありました:)
というわけで、これが短い、より良いバージョンです。最高のものではありませんが、かなりうまく機能します。説明を簡単にするために、1 つのサービスと、それを利用したいクライアントがあるとします。
- ファイアウォールの外側で実行され、2 つ
のサービスを公開するプロキシ サーバー アプリケーションを追加します。最初のサービスは元のサービスと同一です (同じアドレス、バインディング、コントラクト)
2 つ目は、上記と同じコントラクトをコールバックとして持つ二重サービスです。サービス
- ファイアウォールの内側で実行され、プロキシ サーバーの 2 番目のサービスと元のサービスを消費するプロキシ クライアント アプリケーションを追加します。
- 元のクライアントは、元のサービスではなくプロキシ サーバーを使用します。
使い方:
- プロキシ クライアントがプロキシ サーバーに接続し、コールバックを登録します。
- プロキシ クライアントも元のサービスに接続します
- 元のクライアントがプロキシ サービスに接続する
- プロキシ サーバーは、サービスからのすべての呼び出しをコールバックに転送します (コントラクトが同じであることを思い出してください)。
- プロキシ クライアントは、コールバック実装からのすべての呼び出しを元のサービスのクライアントに転送します (契約は同じです)。
- 元のサービスは呼び出しを処理し、結果を返します
- 返信は逆の順序で元のクライアントに転送されます
元のクライアントは、元のサービスではなくプロキシ サーバーに接続していることを認識していないことに注意してください。
もう1つの注意点は、転送がコードで発生することです。これはあまり良くありません。.NET 4.0 の WCF にはルーティング サポートがありますが、コールバック チャネルのみをルーティングでき、直接チャネルもルーティングできないかどうかはわかりません。
役に立てば幸いです、ギカヌ