我正在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代码中执行此操作。
答案 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,这导致我改变了绑定方法,这是有效的。