我想在VS Pro 2012(VB.NET)中構建一個應用程序,該應用程序將調用RoyalMail的MailMark WSDL,該方法具有期望單個參數(請求)的RetrieveActiveSupplyChains等方法, 。在vb.net中使用第三方web服務
我已經使用SvcUtil工具與/ L:VB切換到下載WSDL,並在我的項目中引用它,我可以看到,一旦我做了
Dim client As PosterUploadClient = New PosterUploadClient()
現在打字的客戶端暴露的方法。提出了我期望看到的所有方法,並且我可以通過身份驗證並在執行client.open()時查看狀態更改,但我無法弄清楚如何提供實際方法所需的參數。根據他們的文檔,RetrieveActiveSupplyChains不需要參數,但他們已經提供了一個xml示例的請求結構,所以我的假設是我需要將此構造爲具有適當值的xml並將其作爲「請求」發送出去?
聽起來不錯?我知道這可能是一個網絡程序員的肉和蔬菜,但不是我以前嘗試過的東西。他們提供作爲例子的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,就無需在我的代碼,但不知道實際創建一個「新的HttpRequest」。我已經做了很多谷歌上搜索,但沒有得到任何東西,很是這樣的
的WSDL這裏如果這能幫助的: https://customertest.rm-manifest.com/PosterUpload/PosterUpload.svc
感謝您的回覆,所以對於需要我發送參數(如SupplyChainID)的方法,那麼語法是什麼?雖然如果我只是調用它自己的方法它說參數沒有指定'公共函數RetrieveActiveSupplyChains(請求爲Mosaic.EIB.PosterUploadService.Core.Messages.RetrieveActiveSupplyChainsRequest)參數'請求'作爲Mosaic.EIB.PosterUploadService.Core.Messages .RetrieveActiveSupplyChainsResponse' – Colster
只要在調用方法時傳遞id(我認爲是一個整數)作爲參數。並確保爲所有參數提供參數值。錯誤消息表示您忘記了傳遞參數。如果參數需要一個對象,創建一個該類型的對象並設置它的值 –
然後我得到'Integer'類型的值不能被轉換爲'MM_TEST.Mosaic.EIB.PosterUploadService.Core.Messages.RetrieveActiveSupplyChainsRequest'。我認爲這是我的問題的關鍵,我知道每個方法「應該」需要什麼參數以及什麼格式(字符串,int等),但所有方法只接受一個「請求」參數 – Colster