我正在尝试在VS Pro 2012(VB.NET)中构建一个应用程序,该应用程序将调用RoyalMail的MailMark WSDL,其中包含期望单个参数(请求)的RetrieveActiveSupplyChains等方法。
我已经使用svcutil和/ l:vb开关来下载WSDL并在我的项目中引用它,我可以看到方法在我完成后被暴露
Dim client As PosterUploadClient = New PosterUploadClient()
现在输入客户端。调出我希望看到的所有方法,我可以通过身份验证,当我执行client.open()时看到状态更改,但我无法弄清楚如何提供实际方法所需的参数。根据他们的文档,RetrieveActiveSupplyChains不需要参数,但他们提供了请求结构的xml示例,所以我的假设是我需要将其构造为具有适当值的xml并将其作为“请求”发送? / p>
这听起来不错吗?我知道这可能是一个网络程序员的肉和蔬菜,但不是我以前尝试过的东西。他们提供的xml如下所示:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">http://rm-manifest.com/2014/01/service/IPosterUpload/RetrieveAllActiveSupplyChains</a:Action>
<a:MessageID>urn:uuid:ab5e32a3-812e-4d91-97a8-de00a08874e9</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">https://rm-manifest.com/PosterUpload2/PosterUpload.svc/service</a:To>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2014-10-03T14:32:58.480Z</u:Created>
<u:Expires>2014-10-03T14:37:58.480Z</u:Expires>
</u:Timestamp>
<o:UsernameToken u:Id="uuid-dfaaf0b0-3823-4f75-b607-33f7434295dc-1">
<o:Username>NetworkAccess</o:Username>
<o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">p1</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<RetrieveAllActiveSupplyChains xmlns="http://rm-manifest.com/2014/01/service">
<request xmlns:b="http://rm-manifest.com/2014/01/messages" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
</RetrieveAllActiveSupplyChains>
</s:Body>
</s:Envelope>
但是我仍然不确定它实际上是如何提交的,当然如果我用新的xmltextreader读取该示例,它不喜欢它,并带有以下错误消息
Value of type 'System.Xml.XmlTextReader' cannot be converted to 'MM_TEST.Mosaic.EIB.PosterUploadService.Core.Messages.RetrieveActiveSupplyChainsRequest'
我的假设是WSDL取代了在我的代码中实际创建“New HttpRequest”但不确定的需要。我已经做了很多谷歌搜索,但没有得到任何像这样的工作
如果这有帮助,WSDL就在这里: https://customertest.rm-manifest.com/PosterUpload/PosterUpload.svc
答案 0 :(得分:1)
只需调用该方法即可。提供的XML是调用方法时WCF代理实际发送到服务器的内容。你根本不需要使用它。
如果你使用像Fiddler这样的工具,你会发现只需调用client.RetrieveAllActiveSupplyChains
就会发送一个HTTP请求,其身体类似于XML样本。
事实上,RetrieveAllActiveSupplyChains
标记之外的所有内容根本不与该方法相关 - 它的安全性和寻址数据通常用于建立和执行与Web服务的连接。所有这些都由WCF处理。