[英]Consuming webservice from wsdl with basic authentication from asp.net
[英].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客戶端存根。
方式:
獲取有關Web服務使用的確切請求和響應的有線跟蹤。 使用Fiddler或類似的東西。
構建一個WCF服務,它近似於請求和響應。
獲取的與追蹤
比較(3)與(1)。 記住,您要等價於XML信息集。 例如,您的名稱空間前綴不必相同。 您的名稱空間不必在同一位置聲明。 但是,元素名稱必須完全相同,而xmlns字符串則必須完全相同。 修改WCF服務以使其更接近原始服務。 重新啟動它,轉到步驟3。進行多次迭代。
將您的WCF客戶端指向真正的Web服務
高枕無憂。
我已經做到了,而且有效。 如果您不了解DataContract
屬性如何影響網絡上的XML,這可能會很棘手。 但是,隨着它的使用,您將很快獲得洞察力。
但是,這怎么可能是SOAP服務,而服務端卻沒有WSDL? 重新定位真正的WSDL可能會節省大量工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.