如何使用XDocument调用Web服务?
假设我有在以下地址的ASMX Web服务: http://localhost/BudgetWeb/Service.asmx如何使用XDocument调用Web服务?
此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.Load方法。
我的理解是否正确,或者有没有办法让XDocument.Load实际调用服务器上的Web方法?
尝试使用此:
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
我m使用此代码片段:
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...
好吧,我发现了这个问题。在web.config中为Web服务,你必须补充一点:
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
感谢大家的建议,我真的很感激,尤其是鲁本斯·法里亚斯其工作的例子让我在正确的轨道上。
你在我有机会之前写下了它。但是现在你可以看到负载工作。另外你为什么要这样做而不是创建服务引用? – 2009-12-13 22:44:31
是的,它现在可以工作,并再次感谢您的帮助。客户的要求是,Web服务调用作为uri而不是使用服务引用来调用,所以我没有使用服务引用的选项。我正在嘲笑我的测试的Web服务,并且我排除了协议的原因,这就是为什么它不起作用,除了正确地指出了uri本身的一些问题之外。 – dcp 2009-12-13 22:51:49
@dcp:如果Rubens Farias的例子有帮助,那么您应该将其标记为答案。 – 2009-12-14 06:19:25
如果您的客户端需要Web服务,需要通过服务引用和HTTP使用,请使用WCF,而不要使用ASMX。 WCF支持一个服务的多个端点:f.e.一个用于REST(HTTP通信,使用POST和GET),另一个用于SOAP。容易被.Net,Java和其他框架使用。 – 2009-12-13 23:00:50