【问题标题】:VB.net SOAP webservice client "Unmarshalling Error: unexpected element ..."VB.net SOAP Web 服务客户端“解组错误:意外元素 ...”
【发布时间】:2011-07-28 15:48:22
【问题描述】:

我正在 VB.net 中构建一个客户端,用于调用合作伙伴组织的 Web 服务方法。

我正在遵循http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol%28v=VS.71%29.aspx 的指导方针,因为我无法使用 Visual Studio 2010 的 Web 引用功能使其工作(当我尝试这样做时,它会将 WSDL 中的方法转换为类)。

我已经创建了一个代理类,并且可以实例化该类的一个对象没有问题。

但是,当我尝试调用需要参数的方法时,会出现以下错误:

Unmarshalling Error: unexpected element (uri:"http://api.service.apimember.emailvision.com/", local:"key"). Expected elements are <{}key>,<{}login>,<{}pwd>

有人知道为什么会这样吗? (如果有帮助,我可以发布我的代码和 WSDL 的位置。)

(附注:我可以使用 ZF Soap 类在 PHP 中正常工作,但由于各种原因,我需要使用 .Net 使其正常工作)

编辑添加:我使用 Wireshark 检查传出和传入的 SOAP 消息,以将它们与通过 SoapUI 发送的消息进行比较,一切正常。

这表明我的 VB 客户端正在发送一条消息,其中我尝试访问的 Web 服务的命名空间被声明为方法的属性,而不是在 soap:envelope 属性中。

这是一个例子:

WORKS(由 SoapUI 制作):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"     xmlns:api="http://api.service.apimember.emailvision.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <api:openApiConnection>

不起作用(由我的 VB.net 代码生成):

<?xml version="1.0" encoding="utf-8"?>
<soap:envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:body>
<openApiConnection xmlns="http://api.service.apimember.emailvision.com/">

我想我需要在信封元素中声明 xmlns 'api',所以我需要弄清楚如何在我的 VB.net 代码中执行此操作。

【问题讨论】:

  • 有点苛刻,只是为了否决这个问题而没有给我任何关于为什么它“研究不足、不清楚或没有用”的反馈,不是吗?
  • “因为我无法使用 Visual Studio 2010 的 Web 引用功能使其工作(当我尝试这样做时,它会将方法从 WSDL 转换为类)。” - 你什么意思?
  • 嗨,德米特里。我的意思是,如果我在 Visual Studio 中右键单击我的项目并选择添加服务引用,然后选择高级,然后选择添加 Web 引用,然后我会添加 WSDL 的 URL,VS 会识别 Web 服务。我现在可以添加一个引用来创建一组代理类,但这些是 Web 服务的方法,而不是类,所以我不能在我的代码中使用它们。
  • 例如我要使用的方法叫openApiConnection,它以三个凭据作为参数,并返回一个令牌。在 VS 中,openApiConnection 变成了一个具有三个属性且无法访问其返回值的类。因此,由于这个问题,我放弃了这种进行方式,并开始遵循我发布的链接中描述的技术。谢谢。

标签: vb.net web-services soap


【解决方案1】:

好的,原来我使用的是 System.Web.Services.ProtocolsSoapDocumentMethodAttribute 但我应该一直使用 System.Web.Services.Protocols.SoapRpcMethodAttribute

使用 RPC 绑定样式生成远程服务所需的消息正文格式。在阅读了一些关于我的代码所基于的 MS 代码中的属性如何影响我的输出之后,我遇到了这个页面 http://msdn.microsoft.com/en-us/library/k1y9z356(v=vs.80).aspx,这导致我改变了绑定方法,并且有效。

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多