我有一个来自我们客户公司的 .WSDL 文件,我需要使用它来调用 Web 服务。他们的系统是 SAP (SAP PI)。我的应用程序是在 VS 2008 中开发的 C# .NET 3.5 客户端。我使用他们提供的 .WSDL 文件在 Visual Studio 中添加了服务引用。这为我创建了一个引用类来调用他们的服务,并为我在 app.config 文件中设置了几个绑定(bind)。
我没有更改 app.config 文件中的任何内容,但确实创建了代码来调用他们的 Web 服务。但是,当我调用他们的网络服务时,我收到以下异常:
HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证 header 是“Basic realm="SAP NetWeaver Application Server ..."”。
(我稍微修改了“基本领域”部分中使用的字符串,以免泄露。)
app.config 没有从 WSDL 正确构建吗?我应该以某种方式修改 app.config 文件吗?
我尝试过的事情:
(以及所有其他身份验证类型)
任何指示或帮助将不胜感激。
编辑:经过更多调查,我发现 Visual Studio 有几个关于扩展元素 Policy 和 Policy 断言的警告:
来自命名空间'http://schemas.xmlsoap.org/ws/2004/09/policy' 不是
处理。
XPath://wsdl:definitions[@targetNamespace='urn:sap-com:document:sap:rfc:functions']/wsdl:binding[@name='Binding_FieldValidation']
断言:...
我无法确定这是否与我当前的身份验证方案问题有关。它似乎确实是相关的,但我也找不到任何解决方案来解决这些政策警告。似乎 WCF 不能很好地处理 wsdl 中的语句。
最佳答案
大多数 SAP 服务不支持匿名。
因此,通过调用传递某种形式的身份验证数据。
用户名和密码/X.509 Ticket...
如果您通过调用发送身份验证数据,请尝试此
让 SAP 人员重新生成 WSDL
没有 SAP 断言,没有策略,SOAP 1.1。
您还可以尝试手动编辑 WSDL 以删除多余的废话...
关于web-services - 对 SAP PI 服务进行匿名身份验证的未经授权的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386613/