總結如下:
1.如果客戶只給了WSDL地址如:http://www.xxxxxx.com:50000?wsdl ,而開發電腦又無法訪問這個地址時,怎么添加服務引用,有兩種方法
一.在能訪問這個地址的電腦上用瀏覽器打開這個地址,會看到類似如下的xml,用瀏覽器的另存為,存為一個xml文件,將xml保存到開發電腦上,用vs的添加web引用,在引用地址里輸入xml文件的路徑,即可完成引用.
二.在能夠訪問wsdl地址的電腦上,利用svcutil.exe 工具生成代理類和配置文件,然后將文件復制到項目中即可調用.具體請參考以下:
http://www.cnblogs.com/scottckt/archive/2012/05/20/2510716.html
http://www.cnblogs.com/hedongsong/archive/2012/12/19/2824646.html
2.如果webservice使用了身份驗證時怎么使用(特別是SAP PI發布的)
var smsService = new SmSendService.osSMS_LMSService();
var proxy = new WebProxy("webservice服務地址", true);
proxy.Credentials = new NetworkCredential("UserName", "Pwd");
smsService.Proxy = proxy;
smsService.Credentials = new NetworkCredential("UserName", "Pwd");
紅色字體是關鍵部分,需要注意的是代理和service的身份驗證都要設置用戶名和密碼.
以下是幾種錯誤的處理方式:
提示:遠程服務器返回了意外響應: (407) Proxy Authentication Required。 ---> System.Net.WebException: 遠程服務器返回錯誤: (407) 需要代理身份驗證。
此問題是因為沒有設置代理或者沒有為代理指定身份驗證.
var proxy = new WebProxy("webservice服務地址", true);
proxy.Credentials = new NetworkCredential("UserName", "Pwd");
smsService.Proxy = proxy;
加上這幾句就ok了.
如果出現 System.Net.WebException: 請求因 HTTP 狀態 401 失敗: Unauthorized。
加上smsService.Credentials = new NetworkCredential("UserName", "Pwd");這句就ok了
或者是讓服務發布方啟用匿名訪問也可以.