Как вызвать WebService, у которого есть данные строки запроса? - PullRequest
0 голосов
/ 25 марта 2012

У меня есть веб-сервис, который мне нужно вызвать в приложении .net. Ссылка выглядит так.

http://www.contoso.com/student?id=12345

Это будет работать только тогда, когда его так называют. Для остальной части этого у меня нет доступа. т.е. если я позвоню в браузер без строки запроса, это не сработает. но с помощью строки запроса он вернет данные XML.

Теперь, когда я вызываю это в приложении .net, оно не работает?

Как я могу вызвать это в приложении .NET?

Нормальные методы импорта веб-службы не работают, поскольку для этого требуется строка запроса со значением, и у нас нет доступа к ссылкам, которые не имеют строки запроса.

1 Ответ

3 голосов
/ 25 марта 2012

Как вы сейчас пытаетесь скачать его?

Очень простой способ сделать это - использовать HttpWebRequest и HttpWebResponse классы;

public XmlDocument GetStudentXml(int studentId)
{
    XmlDocument targetXml = new XmlDocument();

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(String.Format("http://www.contoso.com/student?id={0}", studentId));

    webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
    webRequest.Accept = "text/xml";

    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();

    using (Stream responseStream = webResponse.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(responseStream);
        targetXml.Load(reader);
        reader.Close();
    }

    webResponse.Close();

    return targetXml;

}

Этот метод просто создает HttpWebRequest,инициализирует его URL-адресом (через String.Format для добавления идентификатора учащегося), некоторыми учетными данными Windows и ожидаемым типом содержимого.

Затем он вызывает удаленный адрес с помощью метода GetResponse.Затем ответ загружается в поток, и XmlTextReader используется для загрузки данных Xml из потока ответов в XmlDocument, который затем возвращается вызывающей стороне.

Вы также можете использовать WebClient и XDocument для достижения того же:

string url = String.Format("http://www.contoso.com/student?id={0}", studentId);
string remoteXml;

using (var webClient = new WebClient())
{
    remoteXml = webClient.DownloadString(url);
}

XDocument doc = XDocument.Parse(remoteXml);
...