未经授权的HTTP请求,SAP PI服务的匿名身份验证

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

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

我没有修改app.config文件中的任何内容,但确实创建了调用他们的web服务的代码。 然而,当我调用他们的web服务时,我收到了以下异常。

HTTP请求未经授权,客户端认证方案为 "匿名"。 从服务器接收到的认证头是'Basic realm="SAP NetWeaver Application Server ..."'。

(我稍微修改了'Basic realm'部分使用的字符串,以便不泄露。)

是不是 app.config 没有从 WSDL 中得到正确的构建?我是不是应该以某种方式修改app.config文件?

我已经尝试过的事情。

  • 将app.config中的authenticationScheme从Anonymous改为Basic(以及其他所有的验证类型)。
  • 修改了app.config中的境界字符串,使其与异常消息中的境界相匹配。
  • 在我的代码中,在ClientCredentials.Username对象中设置usernamepw字段。

如果有任何指点或帮助,将不胜感激。

编辑:经过一番调查,我发现Visual Studio对扩展元素Policy和Policy断言有几个警告。

  • 自定义工具警告。来自命名空间 "http:/schemas.xmlsoap.orgws200409policy "的可选WSDL扩展元素 "Policy "未被处理。
  • 自定义工具警告:来自命名空间'http:/schemas.xmlsoap.orgws200409policy'的可选 WSDL 扩展元素'Policy'未被处理。以下Policy断言没有被导入。XPath:/wsdl:definitions[@targetNamespace='urn:sap-com:document:sap:rfc:function']wsdl:binding[@name='Binding_FieldValidation']Assertions: ...

我无法找出这是否与我当前的认证方案问题有关。 看起来确实是相关的,但我也没能找到任何解决方案来解决这些策略警告。 似乎WCF不能很好地处理wsdl中的语句。

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

大多数SAP服务不支持匿名,所以通过一些形式的认证数据与调用,用户和密码X.509票...

如果你正在发送认证数据与调用的尝试这个

要求SAP的人重新生成WSDL,其中不包含SAP断言,不包含策略,SOAP 1.1。


0
投票

作为起点,我会验证你是否能用提供的用户名和密码成功调用服务。使用类似于 SoapUI 来测试一切工作是否正确--只需创建一个新的项目,导入SAP PI提供的WSDL,设置用户名和密码并执行调用。你可能会得到某种形式的异常和一个空的有效载荷,但至少可以验证用户名和密码是否正确。

一旦你验证了这一点,检查你的应用程序是否正确地调用了服务,并且http基本认证头正在被发送。你可以通过使用网络监控工具来确认http请求是否被正确生成。像netcat for Windows这样的工具就可以做到--只要让它监听本地机器上的一个端口,然后指定localhost和端口作为你的SOAP端点。

一旦你确认这两点都是正确的,你的调用就会成功。


0
投票

一定是Basic认证头丢失了,或者是凭证出了问题。

如果一个服务是通过它的SOAP适配器发布的,SAP PI总是默认为Basic Authentication。我会调查WCF是否真的发送了那个头(例如,将你的客户端点指向TCP Gateway,让TCP Gateway从WSDL指向SAP PI端点)。

关于警告。AFAIK由SAP PI生成的WSDL总是包含这些Policy Tags,你无法真正忽略它。你可以做的是简单地把它们扔掉,因为它们并不真正有效。

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