只有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了

或者是让服务发布方启用匿名访问也可以.

 

posted @ 2015-02-05 12:54  吴小米  阅读(4875)  评论(0编辑  收藏  举报