【发布时间】:2010-03-10 05:11:49
【问题描述】:
如何在不使用添加 Web 引用的情况下在 asp.net 中以编程方式调用 Web 服务? 我的网络服务网址不断变化。因此我需要在运行时捕获 url 并显示结果。 请指教。
【问题讨论】:
-
在 web.config 中指定所有绑定和传输设置。然后创建一个客户端代理类,该类实现您的 Web 服务接口并创建/打开到服务所在端点的通道。
如何在不使用添加 Web 引用的情况下在 asp.net 中以编程方式调用 Web 服务? 我的网络服务网址不断变化。因此我需要在运行时捕获 url 并显示结果。 请指教。
【问题讨论】:
您可以在运行时更改网络引用的 URL(前提是新地址托管的服务与您最初用于创建引用的架构相同):
MyWebService ms = new MyWebService();
ms.Url = "http://example.com/webservice.asmx";
ms.MyWebMethod();
Web 引用绝对是要走的路 - 虽然由 Web 引用创建的类通常非常繁重,但所有强大的类型都值得您花时间。
【讨论】:
您需要执行以下步骤。
先决条件: 首先,你知道 Web 服务的 URL。
解决方案: 使用wsdl.exe 创建一个代理类然后编译它。
wsdl /out:myProxyClass.cs http://hostServer/WebserviceRoot/WebServiceName.asmx?WSDL
(还有其他可用的开关 对于wsdl。例如生成VB 类,你需要添加开关 /语言:VB)
生成代理类后,您可以轻松地在代码中使用。
MyProxyClass objService = new MyProxyClass();
DateTime time = objService.GetServerTime(); //Suppose service has method getServerTime
【讨论】:
您可以将端点 URL 指定为客户端代理类的构造函数的一部分。
如果您不需要在运行时指定它,也可以在您的web.config 文件中进行设置。
【讨论】:
你在哪里尝试调用服务,服务文件在哪里?
如果服务位于同一站点。为什么不从服务中实例化类名。或者只是创建一个单独的类并使用接口
【讨论】: