1

現在、クライアントのweb.configには次のような複数のサービスがあります。

<endpoint address="http://hostname/ServiceA.svc"
         binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding"
         contract="ServiceReference.ISearchService" name="ServiceA">
</endpoint>

<endpoint address="http://hostname/ServiceB.svc"
         binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding"
         contract="ServiceReference.ISearchService" name="ServiceB">
</endpoint>

そしてかなり多く

このweb.configを使用すると、すべてのエンドポイントアドレスの「ホスト名」を置き換える必要があるため、ホスティング環境の切り替えが困難になり、エラーが発生しやすくなります。

どういうわけか、環境アプリの設定など、ホストを指定できる場所に追加して、エンドポイントを次のように解決したいと思います。http://{hostA}/ServiceX.svc

プログラムで魔法をかける必要がありますか、それとも構成だけでこれを行うことができますか?

4

1 に答える 1

2

コードを介して行う必要があります-構成には、<system.serviceModel / client>セクションのベースアドレスに使用できる「ワイルドカード」はありません。ただし、構成 (「localhost」など) にプレースホルダーを配置し、コードで最初に構成をロードしてから、サーバー名を実際の値で更新することができます (構成にも格納できます。たとえば、AppSettings など)。何処か別の場所)。

var factory = new ChannelFactory<ISearchService>("ServiceA");
factory.Endpoint.Address = ReplaceServerName(factory.Endpoint.Address);
var proxy = factory.CreateChannel();
...
于 2011-08-03T20:32:33.900 に答える