vivion34 发表于 2015-9-21 10:49:48

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