爲什麼你需要根據你連接到服務修改客戶端的代碼?你不會只能有兩個不同的.config文件嗎?一個包含用於開發服務的連接,另一個包含用於測試服務的連接?只需根據測試/ dev模式切換.config文件即可。
當然,您的服務合同是一個界面,服務的開發和測試版本都使用相同的合同界面,但這似乎並不是您要求的。
編輯:
提取物的的ServiceContract接口爲您服務,如果您還沒有這樣做。你的開發和測試服務都應該實現這個接口。事情是這樣的:
[ServiceContract(Namespace="http://stackoverflow.com/questions/965977")]
public interface IASRService
{
[OperationContract]
ASRItem GetASRItem();
}
你的app.config(或web.config文件)文件爲您的客戶應該包含這樣的事情哪裏{namespace}
是你的界面的命名空間位置。如果你想將它們保存在一個.config文件中,這將會起作用。
<system.serviceModel>
<client>
<endpoint name="ASRService" address="http://yourserver.com/ASRService"
contract="{namespace}.IASRService" binding="basicHttpBinding"/>
<endpoint name="ASRServiceTest" address="http://localhost/ASRService"
contract="{namespace}.IASRService" binding="basicHttpBinding"/>
</client>
</system.serviceModel>
使用服務的客戶端中的代碼如下所示。在ChannelFactory構造函數中指定配置的名稱。
ChannelFactory<IASRService> cf = new ChannelFactory<IASRService>("ASRService");
IASRService proxy = cf.CreateChannel();
ASRItem DevServiceItem = proxy.GetASRItem;
OR
ChannelFactory<IASRService> cfTest = new ChannelFactory<IASRService>("ASRServiceTest");
IASRService proxyTest = cfTest.CreateChannel();
ASRItem TestServiceItem = proxyTest.GetASRItem;
由於這兩個代理的類型總是IASRService,你只有操縱的對象需要了解該接口類型的代碼。它不應該關心哪個版本的服務生成了對象。
另外,我會推薦Michele Leroux Bustamante的書Learning WCF。關於如何做所有這些事情的好例子!
請在標題中寫下你的問題,如果你想讓別人看看它。 – Macke 2009-06-08 17:17:56