在vb.net中使用第三方Web服务

时间:2014-12-19 13:18:21

标签: asp.net xml vb.net wsdl webmethod

我正在尝试在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

1 个答案:

答案 0 :(得分:1)

只需调用该方法即可。提供的XML是调用方法时WCF代理实际发送到服务器的内容。你根本不需要使用它。

如果你使用像Fiddler这样的工具,你会发现只需调用client.RetrieveAllActiveSupplyChains就会发送一个HTTP请求,其身体类似于XML样本。

事实上,RetrieveAllActiveSupplyChains标记之外的所有内容根本不与该方法相关 - 它的安全性和寻址数据通常用于建立和执行与Web服务的连接。所有这些都由WCF处理。