5

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

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

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

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

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

我尝试过的事情:

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

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

编辑:经过更多调查,我发现 Visual Studio 有几个关于扩展元素 Policy 和 Policy 断言的警告:

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

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

4

3 回答 3

0

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

如果您通过调用发送身份验证数据,请尝试此

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

于 2015-04-25T23:42:13.767 回答
0

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

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

一旦你验证了这两个都是正确的,你的调用应该会成功。

于 2015-07-02T12:05:34.370 回答
0

必须缺少基本身份验证标头或凭据有问题。

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

关于警告:AFAIK SAP PI 生成的 WSDL 将始终包含这些策略标签,您不能真正忽略它。你能做的就是把它们扔掉,因为它们没有得到真正的验证

于 2015-07-18T08:44:05.667 回答