2011-05-23 99 views
8

我們有一個新的會計系統,爲外部客戶端提供web服務接口。我想訪問其中一個接口,但沒有WSDL,所以我通過使用HttpWebRequest創建了請求,並且它工作正常。.Net - 不使用WSDL的webservice服務

但是爲了方便創建請求和解析響應,我想創建某種自動映射函數。我在XSD文件中有請求和響應結構。有任何想法嗎?

請求創建:

public void SendRequest() 
{ 
    HttpWebRequest request = CreateWebRequest(); 
    XmlDocument soapEnvelopeXml = new XmlDocument(); 
    soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?> 
     <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""> 
     <soap:Body xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> 

      ++ structure type inserted here ++ 

     </soap:Body> 
     </soap:Envelope>"); 

    using (Stream stream = request.GetRequestStream()) 
    { 
     soapEnvelopeXml.Save(stream); 
    } 

    using (WebResponse response = request.GetResponse()) 
    { 
     using (StreamReader rd = new StreamReader(response.GetResponseStream())) 
     { 
      string soapResult = rd.ReadToEnd(); 
      Console.WriteLine(soapResult); 
     } 
    } 
} 
+2

這很有趣。你有沒有嘗試過打電話給他們,並問你爲什麼WSDL? – 2011-05-23 12:06:40

+0

您是否曾嘗試在瀏覽器中打開Web服務,並在URL中添加'?wsdl'? – 2011-05-23 12:08:00

+0

是的,是的。不幸的是沒有WSDL。 – Sys 2011-05-23 12:58:48

回答

1

好吧,如果你真的沒有得到一個正確的WSDL文件保持的方式,但有XSD:■你很可能使用xsd.exe工具來創建映射到您的請求類和響應類型。

像這樣的東西(在Visual Studio命令提示符運行此)

xsd.exe TheRequest.xsd /c /n:Your.Namespace 
xsd.exe TheResponse.xsd /c /n:Your.Namespace 

但實際上,盡力去發現,WSDL,它會讓你的生活變得更加簡單..

+0

你能解釋我可以如何使用生成的類來創建HttpWebRequest? – Sys 2011-05-23 13:03:18

+0

在這裏,我正步入一個舒適的區域,但我認爲在生成的類上使用XmlSerializer應該讓您成爲SOAP請求/響應的「消息」部分。 也從新聞組中找到這個舊條目,它可能有一些幫助:http://www.dotnet247.com/247reference/msgs/41/205010.aspx – CodingInsomnia 2011-05-23 17:50:39

0

我建議您創建 WSDL - 對其進行反向工程,然後從中生成您的webservices客戶端存根。

的方式做到這一點:

  1. 獲取Web服務使用的確切請求和響應的跡線。使用Fiddler或類似的東西。

  2. 構建一個WCF服務,它近似於請求和響應。

  3. 獲取的跟蹤

  4. 比較(3)(1)。記住你想要XML infoset等價。例如,您的命名空間前綴不必相同。你的名字空間不需要在同一個位置聲明。但是,元素名稱需要完全相同,並且xmlns字符串需要完全相同。修改WCF服務以更貼近原始。重新啓動它,請轉到步驟3.根據需要重複多次。

  5. 點的WCF客戶端真正的Web服務

  6. 高枕無憂。

我已經做到了這一點,它的工作原理。如果您沒有深入瞭解DataContract屬性如何影響線路上的XML,那將會非常棘手。但是當你玩它時,你會很快獲得洞察力。

但是它怎麼可能是一個SOAP服務,並且服務端沒有WSDL?它可以爲您節省大量的工作,重新加倍努力找到真正的WSDL。