我有一个来自我们客户公司的.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文件吗?
我尝试过的事情:
任何指示或帮助都将不胜感激。
编辑:经过一些调查后,我发现Visual Studio有几个关于扩展元素策略和策略断言的警告:
我无法确定这与我当前的身份验证方案问题是否相关。它似乎确实相关,但我还没有找到任何解决方案来解决这些政策警告。看起来WCF并不能很好地处理wsdl中的语句。
答案 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将始终包含这些策略标记,您无法真正省略它。你可以做的就是把它们扔掉,因为它们没有真正验证