2014-12-19 73 views
0

我想在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

回答

1

只要調用方法。提供的XML是調用該方法時由WCF代理實際發送到服務器的內容。你根本不需要使用它。

如果您使用Fiddler這樣的工具,您會發現只需調用client.RetrieveAllActiveSupplyChains就會發送一個HTTP請求,其中包含一個與XML示例相似的主體。

實際上,RetrieveAllActiveSupplyChains標記之外的所有內容都與方法無關 - 它是安全性和尋址數據,通常用於建立和執行與Web服務的連接。所有這些都由WCF處理。

+0

感謝您的回覆,所以對於需要我發送參數(如SupplyChainID)的方法,那麼語法是什麼?雖然如果我只是調用它自己的方法它說參數沒有指定'公共函數RetrieveActiveSupplyChains(請求爲Mosaic.EIB.PosterUploadService.Core.Messages.RetrieveActiveSupplyChainsRequest)參數'請求'作爲Mosaic.EIB.PosterUploadService.Core.Messages .RetrieveActiveSupplyChainsResponse' – Colster

+0

只要在調用方法時傳遞id(我認爲是一個整數)作爲參數。並確保爲所有參數提供參數值。錯誤消息表示您忘記了傳遞參數。如果參數需要一個對象,創建一個該類型的對象並設置它的值 –

+0

然後我得到'Integer'類型的值不能被轉換爲'MM_TEST.Mosaic.EIB.PosterUploadService.Core.Messages.RetrieveActiveSupplyChainsRequest'。我認爲這是我的問題的關鍵,我知道每個方法「應該」需要什麼參數以及什麼格式(字符串,int等),但所有方法只接受一個「請求」參數 – Colster

相關問題