[英]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服務(不確定系統,我是客戶端)。這有點麻煩,因為:
<xsd:import>
在wsdl中的引用。 Visual Studio不明白 總之,您可以限制術語“互操作性”。 標准說它是可互操作的,但是領域並不總是這樣。
我歡迎“休息”服務的新世界。 這樣可以簡化很多互操作性。 缺點是您可能必須自己構建管道的一部分。
好消息,您提到的服務似乎也包含了這種休息理念。 這不會很簡單,但是您可以構建簡單的Http請求(發布,獲取或放置)以查詢此服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.