如何在ASP.NET中以编程方式调用Web服务

13

如何在不使用添加 Web 引用的情况下在 asp.net 中以编程方式调用 Web 服务? 我的 Web 服务 URL 经常发生变化。因此,我需要在运行时捕获 URL 并显示结果。 请给予建议。


在web.config中指定所有绑定和传输设置。然后创建一个客户端代理类,该类实现您的Web服务接口并创建/打开到服务所在端点的通道。 - Sergey
4个回答

18

在运行时,您可以更改Web引用的URL(前提是新地址托管与您最初用于创建引用的相同模式的服务):

MyWebService ms = new MyWebService();
ms.Url = "http://example.com/webservice.asmx";
ms.MyWebMethod();

使用Web引用绝对是一个不错的选择 - 虽然由Web引用创建的类通常非常重,但所有这些强类型都值得你去尝试。


4
这似乎是迄今为止最简单的解决方案。为什么它没有得到更多的关注呢? - Kjensen
因为问题是动态调用服务,而不是添加 Web 引用并下载代理。 - Sanjeev Singh

4
你需要完成以下步骤。
先决条件:首先,您需要知道Web服务的URL。
解决方案:使用wsdl.exe创建代理类,然后编译它。
wsdl /out:myProxyClass.cs http://hostServer/WebserviceRoot/WebServiceName.asmx?WSDL

(wsdl还有其他可用的开关。例如,要生成VB类,需要添加/ language:VB开关)

生成代理类后,您可以轻松地在代码中使用。

MyProxyClass objService = new MyProxyClass();
DateTime time = objService.GetServerTime(); //Suppose service has  method getServerTime

大家好,感谢所有提供解决方案的人。我的做法是添加了一个 Web 服务作为引用,并将其属性设置为动态。然后编辑了 Reference.cs(Web 服务)类的构造函数,以便动态传递 URL。 - DJ.

2
你可以在客户端代理类的构造函数中指定终端URL。如果你不需要在运行时指定,也可以在web.config文件中设置。

0
你是在哪里尝试调用服务,服务文件又位于何处?
如果服务位于同一站点上,为什么不直接从服务中实例化类名呢?或者创建一个单独的类并使用接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接