另一種選擇是爲指向不同地址的相同服務添加多個端點配置。然後,當您創建服務客戶端的新實例時,您將傳遞端點配置的名稱。
ContractServiceContractClient client =
new ContractServiceContractClient("DEV_Endpoint");
或
ContractServiceContractClient client =
new ContractServiceContractClient("PROD_Endpoint");
而在你的ServiceReference配置
<endpoint address="http://localhost:7821/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="DEV_Endpoint" />
或
<endpoint address="http://service.apps.com/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="PROD_Endpoint" />
然後,如果你只需要創建一個全局靜態字符串或把某些東西在你的應用.config包含th您想要使用的端點配置的名稱,那麼您只需在該位置更改它,並且它將在整個應用程序中更新。
這裏唯一的問題是,如果您對同一合同有多個端點配置,則無法通過要使用的端點配置,就無法創建服務客戶端實例。
如果您使用的是Visual Studio 2010,那麼最佳做法是使用Web.config轉換。否則,最好的做法是編輯web.config。這就是它的目的。 –
@JohnSaunders感謝您的回覆。因此,如果我看到以下使用(ContractService.ContractServiceContractClient client = new ContractService.ContractServiceContractClient()){ContractService.AddContractCommentRequest request = new ContractService.AddContractCommentRequest();'那麼我當然想要添加一個新的Contract Service指向一樣的名字?但在2010年只是編輯轉換部分? –
爲此,我在hosts文件中使用了dns條目。 例如在生產環境中,服務託管在services.myapplication.com中。 我有我的本地機器中的服務副本,我的主機文件將轉發這些請求。 這是不好的做法嗎?我可以將其更改爲任何我想要的環境(prod/test/dev或local)...而不更改配置文件。 – Romeo