我有一个来自客户公司的.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文件吗?
我尝试过的事情:
任何指针或帮助将不胜感激。
编辑:经过更多调查,我发现Visual Studio对扩展元素Policy和Policy assertions有一些警告:
我无法找出这是否与我当前的身份验证方案问题有关。它似乎确实相关,但是我也无法找到解决这些政策警告的任何解决方案。似乎WCF不能很好地处理wsdl中的语句。
[大多数SAP服务不支持匿名。因此,随调用传递某种形式的身份验证数据。用户名和密码/ X.509票证...
如果您通过呼叫发送身份验证数据,请尝试此操作
请SAP专家使用以下命令重新生成WSDL:没有SAP断言,没有策略,SOAP 1.1。您也可以尝试手动编辑WSDL以删除多余的东西...
首先,我确认您可以使用提供的用户名和密码成功调用该服务。使用SoapUI之类的东西来测试一切是否正常-只需创建一个新项目,导入SAP PI提供的WSDL,设置用户名和密码并执行调用。您可能会遇到某种形式的异常,其中的有效负载为空,但至少可以验证用户名和密码是否正确。
一旦您确认其正常运行,请检查您的应用程序是否正确调用了该服务以及是否已发送http基本身份验证标头。您可以通过使用网络监视工具并检查是否正确生成了http请求来确认这一点。诸如Windows的netcat之类的工具可以做到这一点-只需使其侦听本地计算机上的端口,然后将localhost和该端口指定为SOAP端点即可。
一旦您验证了两个都正确,您的通话应该会成功。
必须缺少基本身份验证标头或某些错误与凭据。
如果通过服务的SOAP适配器发布服务,则SAP PI始终默认为基本身份验证。我将调查WCF是否确实发送了该标头(例如,将您的客户端端点指向TCP网关,并让TCP网关从WSDL指向SAP PI端点)。
关于警告:AFAIK,SAP PI生成的WSDL将始终包含这些策略标记,您不能真正忽略它。您可以做的就是将它们扔掉,因为它们尚未真正通过验证