デフォルトのプロキシを使用せずに、WCF クライアントでプログラムによって HTTP プロキシを設定するにはどうすればよいですか?
プロキシ、プロキシ、プロキシ。
WCF 開発モデルに従って、サービスの WSDL で svcutil.exe を実行して、クライアント側の "プロキシ" クラスを生成します。(これにより、クライアント側の構成ファイルも生成されます)。
私のコードでは、そのクラスのインスタンスを新規作成し、サービスに接続できます。非常に素晴らしい。
var svcProxy = new MyWebService();
svcProxy.GetInformation(request);
これをプロキシ クラスと呼んでいますが、別のプロキシ、http プロキシがあります。このサービスは wsHttpBinding basicHttpBinding を使用しているため、http 経由です。ここで、HTTP プロキシ (.NET BCL の System.Net.WebProxy によってモデル化) を介してクライアントを Web サービスに接続するとします。私は、.NET と WCF のドキュメントを読んだ豊富で楽しい経験から、特に指示がない限り、WCF ランタイムは http/https 経由で通信するときに既定のシステム プロキシを使用することを知っています。
ここで説明されているように、WinXP/2003では ProxyCfg.exe を使用してコマンド ラインから設定できます。また、以降のバージョンの Windows では、ここで説明されているように netsh.exe を使用して設定できます。
System.Net.WebRequest.DefaultWebProxy プロパティを設定して、アプリケーション内で使用する既定の Web プロキシを指定することもできます。
しかし、システム全体のプロキシとは異なるプロキシ経由で接続したいとしますか? たとえば、システム全体のプロキシはないかもしれませんが、特に Web サービスにはプロキシを使用する必要があります。または、システム全体のプロキシがあるかもしれませんが、Web サービスには別のプロキシを使用する必要があります。実際には、複数の Web サービス クライアントがあり、それぞれが異なるプロキシを取得する必要があります。
バインディングごとにプロキシを設定するにはどうすればよいですか?
ASMX モデルでは、次のことができます。
var svcProxy = new MyWebService();
svcProxy.Proxy = new System.Net.WebProxy("http://proxyserver:1234", true);
svcProxy.GetInformation(request);
しかし、これは WCF では不可能です。WCF で生成されたクライアント側プロキシ クラスは、Proxy プロパティを公開しません。クライアント側プロキシごとに http プロキシを設定するにはどうすればよいですか? また、http プロキシにも認証を設定するにはどうすればよいですか?