簡體   English   中英

如何調用不在.NET中開發的Web服務

[英]How to call a webservice that wasn't developed in .NET

過去,我曾有過調用WCF服務或ASMX服務的經驗,您只需將服務引用添加到.svc或.asmx url,然后它會為您生成代理,然后您便具有了智能感知來調用這些方法。

非.net Web服務是否相同?

我需要將此稱為http://www.earthtools.org/webservices.htm

從winrt應用程序中的c#代碼中獲取,但是我只是不知道如何

如果您有WSDL,則可以添加對該服務的引用。 但是在這里您嘗試調用REST服務。

您需要發送發帖請求並將響應發送為:

private const string BASE_URL = "http://www.earthtools.org/timezone";
private const string REQUEST_URL_FORMAT = "{0}/{1}/{2}";

public timezone GetTimeZone(double latitude, double longitude)
{
    var uriString = String.Format(REQUEST_URL_FORMAT, BASE_URL, latitude, longitude);
    var requestUri = new Uri(uriString);

    var request = WebRequest.Create(requestUri);
    using (var response = request.GetResponse())
    {
        using (var responseStream = response.GetResponseStream())
        {
            var ser = new XmlSerializer(typeof (timezone));
            var result = (timezone) ser.Deserialize(responseStream);
            return result;
        }
    }
}

這里的例子。

如果它們是SOAP Web服務,則仍可以將Visual Studio指向.WSDL端點,並使其生成客戶端代理。 但是這些似乎是REST服務。 我認為您最好的選擇是使用XDocument.Load或諸如此類,然后使用Linq-to-XML或XML反序列化將XML轉換為C#類。

例如,假設您要調用此服務 一個簡單的方法來獲得經緯度結果將是這樣的:

XDocument xdoc = XDocument.Load("http://www.earthtools.org/height/52.4822/-1.8946");
var lat = (decimal)xdoc.Element("location").Element("latitude");
var lng = (decimal)xdoc.Element("location").Element("longitude");

微軟營銷專家會告訴您,即使使用異構系統,Web服務也可以互操作。

這是事實的一半。 Web服務標准實際上是多平台的。 但是,在現場,情況可能會有些復雜。 不同系統的不同理念可能導致不同的行為。

不久前,我添加了查詢使用Visual Studio 2010用Java Web邏輯構建的Web服務(不確定系統,我是客戶端)。這有點麻煩,因為:

  1. Visual Studio代理向導僅了解內聯架構。 在這里,架構是使用<xsd:import>在wsdl中的引用。 Visual Studio不明白
  2. 然后,我移至svcutil以從命令行生成代理。 由於WSDL文件中的某些錯誤(此文件是由服務提供商手動構建的),因此無法直接運行。 我必須請服務提供商清理它的wsdl文件
  3. 代表DTO的xsd文件已由多個Web服務共享。 即使沒有被所有服務使用,這也會導致每個代理中重復相同的類。 我不得不調整部分類以“重新包裝”為唯一的類。

總之,您可以限制術語“互操作性”。 標准說它是可互操作的,但是領域並不總是這樣。

我歡迎“休息”服務的新世界。 這樣可以簡化很多互操作性。 缺點是您可能必須自己構建管道的一部分。

好消息,您提到的服務似乎也包含了這種休息理念。 這不會很簡單,但是您可以構建簡單的Http請求(發布,獲取或放置)以查詢此服務。

暫無
暫無

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

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