簡體   English   中英

.Net-使用不帶WSDL的Web服務

[英].Net - Consuming webservice without WSDL

我們有一個新的會計系統,它為外部客戶提供Web服務界面。 我想訪問其中一個接口,但是沒有WSDL,所以我通過使用HttpWebRequest創建了請求,並且工作正常。

但是,為了簡化請求的創建和響應的解析,我想創建某種自動映射功能。 我在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);
        }
    }
}

好吧,如果您真的沒有辦法保存適當的WSDL文件,但擁有XSD:s,則可以使用xsd.exe工具創建映射到您的請求和響應類型的類。

這樣的事情(在Visual Studio命令提示符中運行)

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

但是,實際上,請盡力找到WSDL,它將使您的生活變得更加輕松。

我建議您創建一個WSDL-對其進行反向工程,然后從中生成Webservices客戶端存根。

方式:

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

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

  3. 獲取的追蹤

  4. 比較(3)與(1)。 記住,您要等價於XML信息集。 例如,您的名稱空間前綴不必相同。 您的名稱空間不必在同一位置聲明。 但是,元素名稱必須完全相同,而xmlns字符串則必須完全相同。 修改WCF服務以使其更接近原始服務。 重新啟動它,轉到步驟3。進行多次迭代。

  5. 將您的WCF客戶端指向真正的Web服務

  6. 高枕無憂。

我已經做到了,而且有效。 如果您不了解DataContract屬性如何影響網絡上的XML,這可能會很棘手。 但是,隨着它的使用,您將很快獲得洞察力。

但是,這怎么可能是SOAP服務,而服務端卻沒有WSDL? 重新定位真正的WSDL可能會節省大量工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM