过去,我有调用 WCF 服务或 ASMX 服务的经验,您只需将服务引用添加到 .svc 或 .asmx url 并为您生成代理,然后您就可以调用方法的智能感知。
非 .net 网络服务也一样吗?
我需要调用这个 http://www.earthtools.org/webservices.htm
来自winrt应用程序中的c#代码,但我只是不知道如何
过去,我有调用 WCF 服务或 ASMX 服务的经验,您只需将服务引用添加到 .svc 或 .asmx url 并为您生成代理,然后您就可以调用方法的智能感知。
非 .net 网络服务也一样吗?
我需要调用这个 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# 类。
例如,假设您要调用此服务。获得 lat/lng 结果的简单方法是这样的:
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");
Microsoft 营销人员会告诉您,Web 服务是可互操作的,即使与异构系统也是如此。
这是一半的真相。Web 服务标准实际上是多平台的。然而,在球场上,它可能会更复杂一些。不同系统的不同理念会导致不同的行为。
不久前,我用 Visual Studio 2010 添加了一个用 Java Web 逻辑(不确定系统,我在客户端)构建的 Web 服务。这有点痛苦,因为:
<xsd:import>
. Visual Studio 不明白总而言之,您可以限制术语“互操作性”。标准说它是可互操作的,但该领域并不总是这样。
我欢迎“休息”服务的新世界。这可以大大简化互操作性。缺点是您可能必须自己构建管道的一部分。
好消息,您提到的服务似乎包含这种休息理念。这并不简单,但您可以构建简单的 Http 请求(post、get 或 put)来查询此服务。