【问题标题】:How to call a webservice programmatically in asp.net如何在 asp.net 中以编程方式调用 Web 服务
【发布时间】:2010-03-10 05:11:49
【问题描述】:

如何在不使用添加 Web 引用的情况下在 asp.net 中以编程方式调用 Web 服务? 我的网络服务网址不断变化。因此我需要在运行时捕获 url 并显示结果。 请指教。

【问题讨论】:

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

标签: web-services asp.net-3.5


【解决方案1】:

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

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

Web 引用绝对是要走的路 - 虽然由 Web 引用创建的类通常非常繁重,但所有强大的类型都值得您花时间。

【讨论】:

  • 这似乎是迄今为止最简单的解决方案。为什么没有得到更多的爱?
  • 因为问题是动态调用服务,而不是通过添加 Web 引用和下载代理。
【解决方案2】:

您需要执行以下步骤。

先决条件: 首先,你知道 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

【讨论】:

  • 嗨,感谢大家的解决方案。我所做的是,我添加了一个 Web 服务作为参考。并将其属性设置为dynamic。然后编辑Reference.cs(webservice的)类的构造函数,以便动态传递url。
【解决方案3】:

您可以将端点 URL 指定为客户端代理类的构造函数的一部分。

如果您不需要在运行时指定它,也可以在您的web.config 文件中进行设置。

【讨论】:

    【解决方案4】:

    你在哪里尝试调用服务,服务文件在哪里?

    如果服务位于同一站点。为什么不从服务中实例化类名。或者只是创建一个单独的类并使用接口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2016-07-09
      • 2016-02-26
      相关资源
      最近更新 更多