1

バックグラウンドで実行されるC#アプリケーションがあります。このアプリケーションの実行には1〜10分かかる場合があり、実行の開始から終了まで、複数のWebメソッドを呼び出すWCFサービスと通信します。

あまりにも多くのプロキシオブジェクトを作成/閉じることを避けるために、プロセスの間、1つのプロキシオブジェクトを用意しました。WCFサービスのコピーが配置されるIISが構成されたサーバーボックスがいくつかあり、両方のボックスを使用して負荷を分散したいと考えています。高価な負荷分散ソリューションがないため、プロキシのエンドポイントアドレスをオンザフライで変更して、メソッド呼び出しごとに異なるサーバーボックスと通信したいと思います。

私は最初のメソッド呼び出しの前にこれを試しました:

client.Endpoint.Address = new EndpointAddress("http://box1.wcfserviceaddress.com/MyService.svc");

これをさらに変更しても効果はなく、クライアントが最初に接続したボックスはメソッド呼び出しを受信し続けます。また、サービスインスタンス管理をセッションから呼び出しごとに変更しても違いはありません。

これを行うことはできますか、それともメソッド呼び出しごとにクライアントを作成する必要がありますか?

よろしく、F。

4

2 に答える 2

3

ClientBaseプロキシはwhich implementsから派生しますICommunicationObject。派生CommunicationObjectまたは実装するすべてのクラスICommunicationObjectは、同じ動作を共有します。それらは状態でのみ構成できますCreated。通信オブジェクトがCreated状態から移動すると、構成を変更することはできません。そのため、プロキシを初めて使用した後 (状態を に変更Opened) にアドレスを設定しても効果はありません。新しいアドレスを持つプロキシを取得する唯一の方法は、新しいアドレスを作成することです。

于 2011-06-19T20:53:19.137 に答える
0

クライアントを作成して開くと、ABC を変更できないことが 99% 確実です (100% であることを再確認する必要はありません)。サーバーごとにプロキシを実行する必要があります。

于 2011-06-19T20:56:07.590 に答える