从Web服务遇到未经授权的身份验证方案

时间:2013-01-17 19:29:49

标签: web-services wsdl sap basic-authentication

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

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

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

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

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

我尝试过的事情:

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

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

编辑:经过一些调查后,我发现Visual Studio有几个关于扩展元素策略和策略断言的警告:

  • 自定义工具警告:可选的WSDL扩展元素'Policy' 来自命名空间'http://schemas.xmlsoap.org/ws/2004/09/policy'不是 处理。
  • 自定义工具警告:未导入以下政策声明:
    的XPath:// WSDL:定义[@的targetNamespace = '瓮:SAP-COM:文件:SAP:RFC:功能'] / WSDL:结合[@名称= 'Binding_FieldValidation'] 断言:......

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

3 个答案:

答案 0 :(得分:0)

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

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

让SAP人员重新生成WSDL 没有SAP断言,没有策略,SOAP 1.1。 您也可以手动编辑WSDL以删除额外的guff ...

答案 1 :(得分:0)

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

一旦您确认其正常运行,请检查您的应用是否正确调用了该服务,以及是否正在发送http基本身份验证标头。您可以使用网络监视工具并检查是否正确生成了http请求来确认这一点。像netcat for Windows这样的东西可以做到 - 只需让它监听本地机器上的端口,然后指定localhost和端口作为SOAP端点。

一旦您确认这两项都是正确的,您的通话就应该成功。

答案 2 :(得分:0)

必须缺少基本身份验证标头或出错 凭证。

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

关于警告:SAP PI生成的WSDL的AFAIK将始终包含这些策略标记,您无法真正省略它。你可以做的就是把它们扔掉,因为它们没有真正验证