Как вызвать веб-сервис, который не был разработан в .NET

В прошлом у меня был опыт вызова служб WCF или служб ASMX, вы просто добавляете ссылку на службу в URL-адрес .svc или .asmx, и он генерирует для вас прокси, а затем у вас есть intellisense для вызова методов.

Это то же самое для веб-сервиса, отличного от .net?

Мне нужно назвать это http://www.earthtools.org/webservices.htm.

из кода С# в приложении winrt, но я просто не знаю, как


person Luis Valencia    schedule 11.06.2012    source источник
comment
Вы пробовали что-нибудь? Как сослаться/добавить веб-сервис в проект и указать на этот URL-адрес? SOAP стандартен для разных платформ.   -  person Kangkan    schedule 11.06.2012


Ответы (3)


Если у вас есть 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;
        }
    }
}

пример из здесь.

person Damith    schedule 11.06.2012

Если бы это были веб-службы SOAP, вы все равно могли бы указать 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");
person McGarnagle    schedule 11.06.2012

Специалист по маркетингу Microsoft скажет, что веб-службы совместимы даже с гетерогенной системой.

Это половина правды. Стандарт веб-сервисов на самом деле мультиплатформенный. Однако на поле все может быть немного сложнее. Разная философия разных систем может привести к разному поведению.

Недавно я добавил к запросу веб-службу, созданную с помощью веб-логики Java (не уверен в системе, я был на стороне клиента) с Visual Studio 2010. Это было немного больно, потому что:

  1. Мастер прокси Visual Studio понимает только встроенную схему. Здесь схема была ссылкой в ​​wsdl с использованием <xsd:import>. Visual Studio этого не понимает
  2. Затем я перешел к svcutil для создания прокси из командной строки. Это не работало напрямую из-за некоторых ошибок в файле WSDL (этот файл был вручную создан поставщиком услуг). Я должен попросить поставщика услуг очистить его файл wsdl
  3. файл xsd, представляющий DTO, использовался несколькими веб-службами. Это приводит к дублированию одних и тех же классов в каждом прокси, даже если они не используются всеми службами. Мне пришлось настроить частичные классы, чтобы «перевернуть» в уникальные классы.

В заключение можно ограничиться термином «интероперабельность». Стандарты говорят, что это совместимо, но поле говорит, что не всегда.

Приветствую новый мир услуг "отдыха". Это может значительно упростить взаимодействие. Недостаток в том, что вам, возможно, придется самостоятельно соорудить часть сантехники.

Хорошие новости: сервис, о котором вы упомянули, похоже, поддерживает эту философию отдыха. Это будет непросто, но вы можете создать простой Http-запрос (отправить, получить или поставить) для запроса этой службы.

person Steve B    schedule 11.06.2012