只有wsdl添加webservice 带身份验证的WebService使用(特别是SAP PI发布的)总结(备忘录)
总结如下:
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了
或者是让服务发布方启用匿名访问也可以.