如何使用XDocument调用Web服务?

时间:2009-12-13 21:56:38

标签: c# asmx

假设我在以下地址有一个asmx网络服务: http://localhost/BudgetWeb/Service.asmx

此Web服务具有带以下签名的Web方法:

string GetValue(string key)

此GetValue方法返回如下字符串:

<?xml version=\"1.0\" encoding=\"utf-8\" ?><value>250.00</value>

如果我想这样做怎么办:

XDocument doc = XDocument.Load("http://localhost/BudgetWeb/Service.asmx?op=GetValue&key=key1")

这不起作用,我很确定XDocument.Load实际上并没有在服务器上调用Web方法。我认为它希望uri指向一个可以加载的文件。要调用Web方法,我想我必须有一个Web代理类,并且必须使用它来调用string GetValue(string key),然后我可以使用从Web代理类返回的值传递给XDocument 。加载方法。

我的理解是否正确,或者XDocument.Load是否有办法在服务器上实际调用Web方法?

2 个答案:

答案 0 :(得分:5)

尝试使用它:

XDocument doc = XDocument.Load(
        "http://localhost/BudgetWeb/Service.asmx/GetValue?key=key1");

编辑:刚想通了:你使用的是无效的URI:

http://localhost/BudgetWeb/Service.asmx?op=GetValue&key=key1

应该是

http://localhost/BudgetWeb/Service.asmx/GetValue?key=key1

我正在使用此代码段:

string uri = "http://www.webservicex.net/stockquote.asmx/GetQuote?symbol=MSFT";
XDocument doc1 = XDocument.Load(uri);
Console.WriteLine(doc1.Root.Value);  // <StockQuotes><Stock><Symbol>MSFT...

答案 1 :(得分:3)

好的,我发现了这个问题。在Web服务的web.config中,您必须添加以下内容:

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

感谢大家的建议,我真的很感激,尤其是鲁本斯法里亚斯,他的工作实例让我走上正轨。