在裡調用 web service的時候默認生成的代理類的URL行為是使用靜態值如果web 服務進行轉移那就有可能會出現不能訪問的情況需要對Web服務重新引用生成新的代理類這對程序部署帶來許多不便解決辦法就是設置URL行為使用動態值對於許多人沒有去關注所以可能都不知道有這一項功能包括我以前的同事因此寫了這篇文章對一些朋友提供些許幫助當然最好的說明還是通過實例
比如原先的web service在上在對web service進行修改後部署到企業內部的另一台電腦上 IP為
選中引用該Web服務的解決方案中Web References下的節點(這裡ServerFileManager為文件夾名稱)列出下面的屬性
URL //localhost/RedManager/Web References/ServerFileManager/
URL行為靜態
Web 引用 URL
文件夾名稱ServerFileManager
這裡需要通過修改新的IP地址為重新進行編譯才能再次正確調用原來的服務
查看代理類的生成的構造函數如下
public UpLoadFileService()
{
thisUrl = ;
}
上面就是問題所在都被寫死在裡面了
下面是解決辦法
修?腢RL行為值為動態webConfig中會添加下面配置信息
<appSettings>
<add key=RedManagerServerFileManagerUpLoadFileService value=/>
</appSettings>
再來看看服務代理類的構造函數有什麼變化
public UpLoadFileService()
{
string urlSetting = SystemConfigurationConfigurationSettingsAppSettings[RedManagerServerFileManagerUpLoadFileService];
if ((urlSetting != null))
{
thisUrl = stringConcat(urlSetting );
}
else
{
thisUrl = ;
}
}
自此我們可以通過修改nfig配置文件中的配置信息而不需要重新編譯代碼來調整程序
如果使用命令行可以通過Web 服務描述語言工具 (Wsdlexe)來實現
Wsdlexe /urlkey: RedManagerServerFileManagerUpLoadFileService
或者
Wsdlexe /appsettingurlkey: RedManagerServerFileManagerUpLoadFileService
從上面看到在配置文件中<appSettings>下添加了<add key= value= />個人感覺實現更好的方式是使用專門的元素節點來包括這些信息不和appSettings下的其他信息混合就 framework中的數據庫連接字符串一樣有專門的設置本文參考《MicrosoftNET程序設計技術內幕》
From:http://tw.wingwit.com/Article/program/net/201311/12479.html