调用SAP PI服务时,使用客户端身份验证方案'匿名'对HTTP请求进行了未授权

问题描述 投票:5回答:3

我有一个来自客户公司的.WSDL文件,我需要使用它来调用Web服务。他们的系统是SAP(SAP PI)。我的应用程序是在VS 2008中开发的C#.NET 3.5客户端。我使用提供的.WSDL文件在Visual Studio中添加了服务参考。这为我创建了一个引用类,供我用来调用其服务,并在app.config文件中为我设置了几个绑定。

我没有更改app.config文件中的任何内容,但是创建了代码来调用其Web服务。但是,当我致电他们的Web服务时,收到以下异常:

HTTP请求未经客户端身份验证方案'Anonymous'的授权。从服务器收到的身份验证标头是“ Basic realm =“ SAP NetWeaver Application Server ...”。]

((我略微修改了“基本领域”部分中使用的字符串,以便不散发出它。)

不是从WSDL正确构建了app.config吗?我应该以某种方式修改app.config文件吗?

我尝试过的事情:

  • app.config中的authenticationScheme从Anonymous更改为Basic(以及所有其他身份验证类型)
  • 更改了app.config中的领域字符串以匹配异常消息中的领域
  • 在我的代码中的ClientCredentials.Username对象中设置用户名/密码字段

任何指针或帮助将不胜感激。

编辑:经过更多调查,我发现Visual Studio对扩展元素Policy和Policy assertions有一些警告:

  • 自定义工具警告:可选的WSDL扩展元素'策略'不是来自命名空间“ 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中的语句。

web-services wsdl sap sap-xi sap-pi
3个回答
0
投票

[大多数SAP服务不支持匿名。因此,随调用传递某种形式的身份验证数据。用户名和密码/ X.509票证...

如果您通过呼叫发送身份验证数据,请尝试此操作

请SAP专家使用以下命令重新生成WSDL:没有SAP断言,没有策略,SOAP 1.1。您也可以尝试手动编辑WSDL以删除多余的东西...


0
投票

首先,我确认您可以使用提供的用户名和密码成功调用该服务。使用SoapUI之类的东西来测试一切是否正常-只需创建一个新项目,导入SAP PI提供的WSDL,设置用户名和密码并执行调用。您可能会遇到某种形式的异常,其中的有效负载为空,但至少可以验证用户名和密码是否正确。

一旦您确认其正常运行,请检查您的应用程序是否正确调用了该服务以及是否已发送http基本身份验证标头。您可以通过使用网络监视工具并检查是否正确生成了http请求来确认这一点。诸如Windows的netcat之类的工具可以做到这一点-只需使其侦听本地计算机上的端口,然后将localhost和该端口指定为SOAP端点即可。

一旦您验证了两个都正确,您的通话应该会成功。


0
投票

必须缺少基本身份验证标头或某些错误与凭据。

如果通过服务的SOAP适配器发布服务,则SAP PI始终默认为基本身份验证。我将调查WCF是否确实发送了该标头(例如,将您的客户端端点指向TCP网关,并让TCP网关从WSDL指向SAP PI端点)。

关于警告:AFAIK,SAP PI生成的WSDL将始终包含这些策略标记,您不能真正忽略它。您可以做的就是将它们扔掉,因为它们尚未真正通过验证

© www.soinside.com 2019 - 2024. All rights reserved.