Web services 具有SAP PI服务匿名身份验证的未经授权HTTP请求

Web services 具有SAP PI服务匿名身份验证的未经授权HTTP请求,web-services,wsdl,sap,sap-xi,sap-pi,Web Services,Wsdl,Sap,Sap Xi,Sap Pi,我有一个来自我们客户公司的.WSDL文件,我需要使用它来调用web服务。他们的系统是SAP(SAP PI)。我的应用程序是在VS2008中开发的C#NET 3.5客户端。我在VisualStudio中使用提供的.WSDL文件添加了一个服务引用。这为我创建了一个用于调用其服务的引用类,并在app.config文件中为我设置了多个绑定 我没有更改app.config文件中的任何内容,但创建了调用其web服务的代码。但是,当我调用他们的Web服务时,我收到以下异常: HTTP请求未经客户端身份验证方案

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

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

HTTP请求未经客户端身份验证方案“匿名”授权。从服务器接收的身份验证标头为“Basic realm=“SAP NetWeaver Application server…”。

(我稍微修改了“基本领域”部分中使用的字符串,以避免泄露。)

app.config是否未从WSDL正确生成?我是否应该以某种方式修改app.config文件

我尝试过的事情:

  • 将app.config中的authenticationScheme从匿名更改为基本
    (以及所有其他身份验证类型)
  • 已更改app.config中的领域字符串以匹配异常消息中的领域
  • 在我的代码中的ClientCredentials.username对象中设置username/pw字段
任何指点或帮助都将不胜感激

编辑:在进一步调查之后,我发现Visual Studio对扩展元素策略和策略断言有几个警告:

  • 自定义工具警告:可选的WSDL扩展元素“Policy” 从名称空间'http://schemas.xmlsoap.org/ws/2004/09/policy”“不是吗 处理
  • 自定义工具警告:未导入以下策略断言:
    XPath://wsdl:definitions[@targetNamespace='urn:sap com:document:sap:rfc:functions']/wsdl:binding[@name='binding\u FieldValidation'] 断言:

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

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

如果您正在通过调用发送身份验证数据,请尝试以下操作

请SAP人员使用重新生成WSDL 没有SAP断言,没有策略,SOAP 1.1。
您还可以尝试手动编辑WSDL以删除多余的废话…

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

一旦您验证了这一点,请检查您的应用程序是否正确调用了服务,以及是否发送了http基本身份验证头。您可以通过使用网络监视工具并检查http请求是否正确生成来确认这一点。类似netcat for Windows的东西可以做到这一点——只需让它侦听本地计算机上的端口,然后指定localhost和端口作为SOAP端点


一旦您验证了这两个都是正确的,您的呼叫应该会成功。

必须缺少基本身份验证标头或出现错误 带着证件

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

关于警告:假设SAP PI生成的WSDL将始终包含这些策略标记,那么您不能真正地对其进行管理。你所能做的就是简单地把它们扔掉,因为它们并没有真正得到验证