如何调用具有查询字符串数据的WebService?

时间:2012-03-25 10:22:31

标签: asp.net .net xml web-services

我有一个web服务,我需要在.net应用程序中调用。链接看起来像这样。

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

只有当它这样调用时才会起作用。对于其余的这个我没有访问权限。即如果我在没有查询字符串的浏览器上调用它,它将无法工作。但是使用查询字符串它将返回XML数据。

现在,当我在.net应用程序中调用它时,它无效?

如何在.NET应用程序中调用它?

普通Web服务导入方法不起作用,因为它需要一个带有值的查询字符串,我们无法访问没有查询字符串的链接。

1 个答案:

答案 0 :(得分:3)

您目前是如何尝试下载的?

一种非常简单的方法是使用HttpWebRequestHttpWebResponse类;

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以附加学生ID),一些Windows凭据和预期的内容类型对其进行初始化。

然后通过GetResponse方法调用远程地址。然后将响应加载到流中,并使用XmlTextReader将响应流中的Xml数据加载到XmlDocument中,然后将其返回给调用者。

您还可以使用WebClientXDocument来实现同样的目标:

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);