Веб-сервис XML по HTTP - PullRequest
       3

Веб-сервис XML по HTTP

0 голосов
/ 03 августа 2011

Я пытаюсь использовать веб-сервис, который не использует SOAP и WSDL, но я не знаю, как это сделать.Буду очень признателен за некоторые указатели.

API для сервиса:

http://someaddress.com/webservices/name/id, где id - это параметр.

Поддерживаемый метод запроса - GET.

Могу ли я использовать что-то вроде этого:

var myReq = new XMLHttpRequest();
var url = "http://someaddress.com/webservices/name/2"
myReq.open("GET", url, true);
myReq.send();

Ответы [ 5 ]

4 голосов
/ 03 августа 2011

Самый простой способ получить xml - это использовать URL-адрес в качестве аргумента метода XDocument.Load ().

var xml = XDocument.Load("http:...");

Этот метод извлекает данные из удаленного URL-адреса, анализирует их с помощью XmlReader и создает объект XDocument. Затем вы можете использовать LINQ to XML для запроса или преобразования данных.

К сожалению, это не будет работать для запросов POST, DELETE, PUT http

Edit: Это зависит от вашего сервиса и от того, какие операции вы можете с ним сделать:

  1. Использование XDocument.Load() является самым простым решением. Если это простой ресурс через Интернет, без аутентификации, не требуются HTTp-заголовки и он поддерживает только запросы GET, чем этот путь. Вы можете написать метод, который берет ваши параметры и добавляет их в URL

    public SomeClass GetSomeEntity(string id) 
    {
        var xml = XDocument.Load("http://mywebservice.com/ws/" + id);
        // transform xml into an instance of actual type
    }
    
  2. Используя WebClient, вы можете получить больший контроль над HttpRequest. Вы можете установить базовые учетные данные для аутентификации, добавить другие заголовки HTTP, данные формы POST и т. Д. У вас также есть методы «асинхронной».

    using (var client = new WebClient()) 
    {
       var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
       // process xml
    } 
    
  3. Вы можете думать о «HttpWebRequest» как о низкоуровневой реализации веб-запроса.

1 голос
/ 03 августа 2011

Вот фрагмент кода, который поможет вам сделать это ..

public static string SendRequest(string uri, string method, string contentType, string body)
{
    string responseBody = String.Empty;

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(uri));
    req.Method = method;
    if (!String.IsNullOrEmpty(contentType))
    {
        req.ContentType = contentType;
    }
    if (!String.IsNullOrEmpty(body))
    {
        byte[] bodyBytes = Encoding.UTF8.GetBytes(body);
        req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
        req.GetRequestStream().Close();
    }

    HttpWebResponse resp;
    try
    {
        resp = (HttpWebResponse)req.GetResponse();
    }
    catch (WebException e)
    {
        resp = (HttpWebResponse)e.Response;
    }

    Stream respStream = resp.GetResponseStream();
    if (respStream != null)
    {
        responseBody = new StreamReader(respStream).ReadToEnd();
    }

    return responseBody;
}
0 голосов
/ 03 августа 2011

Использование JQuery является самым простым, насколько я знаю.Попробуйте, если это работает в вашем случае:

var param = new Object();
    param.id = 2;

    $.ajax({
        type: "GET",
        url: "http://someaddress.com/webservices/name",
        data: $.toJSON(param),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            if (msg.d) {
              //do something 
            } 
        }
    });
0 голосов
/ 03 августа 2011

Посетите Центр разработчиков REST WCF - он показывает, как легко и эффективно вы можете создавать службы REST (без SOAP) с использованием инфраструктуры WCF.

0 голосов
/ 03 августа 2011

Объект WebClient очень хорошо подходит для подобных задач.

...