2011-08-03 6 views
1

に複数のサービスをリダイレクトし、私はこのように私のクライアント web.configファイル内に複数のサービスがあります。WCFクライアントの設定 - 今、別のホスト

<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

のように解決されていたいです構成だけで?

+0

おそらく関連:http://stackoverflow.com/questions/2016285/wcf-client-configuration-base-address – lurscher

+1

@marc_sあなたは例やリンクを提供することができますか?私のサービスはで宣言されており、私が見たすべての例では、ベースアドレスはタグ – lurscher

+0

の中に入れてあります。申し訳ありませんが、私はクライアントサイドベースアドレスはサーバー側でのみ動作します。残念ながら:-( –

答えて

2

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

var factory = new ChannelFactory<ISearchService>("ServiceA"); 
factory.Endpoint.Address = ReplaceServerName(factory.Endpoint.Address); 
var proxy = factory.CreateChannel(); 
... 
+0

+1ええ、これは、クライアント側のための中途半端に管理可能なソリューションになると思います - クライアント側には "ベースアドレス"の概念がないことも悪いです... –

関連する問題