VB.net SOAP webservice客户端“Unmarshalling Error:意外元素......”

时间:2011-07-28 15:48:23

标签: vb.net web-services soap

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

我遵循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的位置。)

(P.S。我可以使用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代码中执行此操作。

1 个答案:

答案 0 :(得分:0)

好的,事实证明我正在使用 System.Web.Services.Protocols SoapDocumentMethodAttribute 但我应该一直在使用 System.Web.Services.Protocols < / em>的。的 SoapRpcMethodAttribute 即可。

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