C#_.NET_动态调用webservice的三种方式
C# _.NET_动态调用webservice的三种方式 在本文中,我们将讨论如何动态调用WebService的三种方式。在某些情况下,我们可能需要在程序运行期间动态调用一个未知的服务。这可以通过使用.NET Framework的System.Web.Services.Description命名空间来实现。 第一步:下载WSDL数据 从目标URL下载WSDL数据是动态调用WebService的第一步。在.NET Framework中,我们可以使用System.Web.Services.Description命名空间中的ServiceDescription类来下载WSDL数据。 第二步:创建和格式化WSDL文档文件 使用ServiceDescription类下载WSDL数据后,我们需要使用ServiceDescriptionImporter类来创建和格式化WSDL文档文件。ServiceDescriptionImporter类可以将WSDL文档文件中的信息导入到System.CodeDom.CodeCompileUnit对象中。 第三步:创建客户端代理类 使用ServiceDescriptionImporter类创建和格式化WSDL文档文件后,我们可以使用CodeDom动态创建客户端代理类程序集。我们可以使用System.CodeDom命名空间中的CodeCompileUnit类来创建客户端代理类程序集。 第四步:使用反射调用相关WebService方法 我们可以使用反射调用相关WebService方法。我们可以使用System.Reflection命名空间中的MethodInfo类来调用WebService方法。 需要引用的名称空间 在动态调用WebService时,我们需要引用以下四个名称空间: * System.Web.Services.Description * System.CodeDom * Microsoft.CSharp * System.CodeDom.Compiler 重要的类 在动态调用WebService时,我们需要使用以下几个重要的类: * ServiceDescription:WS描述 * ServiceDescriptionImporter:通过描述生成客户端代理类 * CodeCompileUnit:用于设定动态代码的名称空间、类名等 * CodedomProvider:用于创建和检索代码生成器和代码编译器的实例 * ICodeCompiler:用于编译基于System.CodeDom的源代码表示形式 * CompilerResults:表示从编译器返回的编译结果 使用样例 下面是一个简单的使用样例: ```csharp using System; using System.Web.Services.Description; using System.CodeDom; using Microsoft.CSharp; using System.CodeDom.Compiler; class Program { static void Main(string[] args) { // 下载WSDL数据 ServiceDescription serviceDescription = ServiceDescription.Read("http://localhost:60436/Learn.WEB/WebService.asmx?WSDL"); // 创建和格式化WSDL文档文件 ServiceDescriptionImporter importer = new ServiceDescriptionImporter(); importer.AddServiceDescription(serviceDescription); CodeCompileUnit codeCompileUnit = new CodeCompileUnit(); importer.Import(codeCompileUnit); // 创建客户端代理类 CodeDomProvider provider = new CSharpCodeProvider(); CompilerResults results = provider.CompileAssemblyFromDom(codeCompileUnit); // 使用反射调用相关WebService方法 MethodInfo methodInfo = results.CompiledAssembly.GetType("WebService").GetMethod("HelloWorld"); object result = methodInfo.Invoke(null, new object[] { }); Console.WriteLine(result); } } ``` 在上面的例子中,我们使用ServiceDescription类下载WSDL数据,然后使用ServiceDescriptionImporter类创建和格式化WSDL文档文件。接着,我们使用CodeDom动态创建客户端代理类程序集。我们使用反射调用相关WebService方法。
- umaga1232014-03-06强大的例子,好好学习下!
- 宗宝2021-12-26强大的例子,学习了,谢谢楼主分享
- 破魂禁2017-11-09强大的例子,学习了
- CGCLuckyStar2018-07-10是文档列子,不是源码DEMO
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LABVIEW程序实例-高层函数读取二进制文件.zip
- LABVIEW程序实例-计算时间.zip
- LABVIEW程序实例-计算时间.zip
- LABVIEW程序实例-建立数组函数.zip
- LABVIEW程序实例-建立数组函数.zip
- LABVIEW程序实例-建立局部变量.zip
- LABVIEW程序实例-控制方式转换.zip
- LABVIEW程序实例-控制方式转换.zip
- LABVIEW程序实例-连线.zip
- LABVIEW程序实例-连线.zip
- LABVIEW程序实例-建立选择结构.zip
- LABVIEW程序实例-建立选择结构.zip
- LABVIEW程序实例-前面板对象常用属性.zip
- LABVIEW程序实例-前面板对象常用属性.zip
- LABVIEW程序实例-前面板对象数据传递.zip
- LABVIEW程序实例-前面板对象数据传递.zip