通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。(.NET 创建WebService并发布到本地IIS)这样是使工作简单了,但是却和提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制。如果哪一天发布Web服务的URL改变了,则我们需要重新让VS.NET生成代理,并重新编译。在某些情况下,这可能是不能忍受的,我们需要动态调用WebService的能力。比如我们可以把Web服务的URL保存在配置文件中,这样,当服务URL改变时,只需要修改配置文件就可以了。
WebService在传输过程中是通过WSDL来进行描述的。因此,我们需要获取WebService的WSDL描述,并通过该描述来动态生成程序集。然后通过反射来获取新生成的程序集,并调用其方法!
具体步骤:
- 从目标URL下载 WSDL 数据。
- 使用 ServiceDescription 创建和格式化 WSDL 文档文件。
- 使用 ServiceDescriptionImporter 创建客户端代理类。
- 使用 CodeDom 动态创建客户端代理类程序集。
- 利用反射调用相关 WebService 方法。
核心方法如下(url 是WebService 的地址,methodname是要调用服务方法名,args是要调用Web服务所需的参数