代码动态调用webservice的类
发布时间:2020-12-17 00:17:49 所属栏目:安全 来源:网络整理
导读:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.IO;using System.Web; //需要右键添
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; using System.Web;//需要右键添加.NET组件System.Web,System.Web.Services,System.Web.Extensions。 using System.Web.Services; using System.Web.Services.Description; using System.Web.Services.Protocols; using System.Xml.Serialization; using System.CodeDom; using System.CodeDom.Compiler; using System.Reflection; namespace myWebServiceNameSpace { class myWebServiceClass { /// <summary> /// webservice返回是string的,使用该方法 /// </summary> /// <param name="url">调用webservice的url</param> /// <param name="className">webservice的类</param> /// <param name="methodName">调用webservice的方法</param> /// <param name="parameters">方法的参数</param> /// <returns>string</returns> public string resultString(string url,string className,string methodName,object[] parameters) { string resultA = ""; try { // 1. 使用 WebClient 下载 WSDL 信息。 WebClient client = new WebClient(); url = url + "?WSDL"; Stream stream = client.OpenRead(url); // 2. 创建和格式化 WSDL 文档。 ServiceDescription description = ServiceDescription.Read(stream); // 3. 创建客户端代理代理类。 ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。 importer.ProtocolName = "Soap"; //指定访问协议。 importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。 importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; importer.AddServiceDescription(description,null,null); //添加WSDL文档。 // 4. 使用 CodeDom 编译客户端代理类。 CodeNamespace nmspace = new CodeNamespace(); //命名空间 CodeCompileUnit unit = new CodeCompileUnit(); unit.Namespaces.Add(nmspace); ServiceDescriptionImportWarnings warning = importer.Import(nmspace,unit); CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters parameter = new CompilerParameters(); parameter.GenerateExecutable = false; parameter.ReferencedAssemblies.Add("System.dll"); parameter.ReferencedAssemblies.Add("System.XML.dll"); parameter.ReferencedAssemblies.Add("System.Web.Services.dll"); parameter.ReferencedAssemblies.Add("System.Data.dll"); CompilerResults result = provider.CompileAssemblyFromDom(parameter,unit); // 5. 使用 Reflection 调用 WebService。 Assembly asm = result.CompiledAssembly; Type t = asm.GetType(className); //参数为web服务中的类名 object o = Activator.CreateInstance(t); MethodInfo method = t.GetMethod(methodName);//参数方法名 resultA = (string)method.Invoke(o,parameters); } catch (Exception ex) { resultA = ex.ToString(); } return resultA; } /// <summary> /// webservice返回是DataSet的,使用该方法 /// </summary> /// <param name="url">调用webservice的url</param> /// <param name="className">webservice的类</param> /// <param name="methodName">调用webservice的方法</param> /// <param name="parameters">方法的参数</param> /// <returns>DataSet</returns> public DataSet resultDataSet(string url,object[] parameters) { DataSet resultA =null; try { // 1. 使用 WebClient 下载 WSDL 信息。 WebClient client = new WebClient(); url = url + "?WSDL"; Stream stream = client.OpenRead(url); // 2. 创建和格式化 WSDL 文档。 ServiceDescription description = ServiceDescription.Read(stream); // 3. 创建客户端代理代理类。 ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。 importer.ProtocolName = "Soap"; //指定访问协议。 importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。 importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; importer.AddServiceDescription(description,unit); // 5. 使用 Reflection 调用 WebService。 Assembly asm = result.CompiledAssembly; Type t = asm.GetType(className); //参数为web服务中的类名 object o = Activator.CreateInstance(t); MethodInfo method = t.GetMethod(methodName);//参数方法名 resultA = (DataSet)method.Invoke(o,parameters); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return resultA; } } } 以上是.cs中的代码。 private void button3_Click(object sender,EventArgs e) { myWebServiceNameSpace.myWebServiceClass myWeb = new myWebServiceNameSpace.myWebServiceClass(); string url = "http://10.19.1.55/123/WebService1.asmx"; string className = "WebService1"; string methodName = "addition"; object[] parameters = new object[2]; parameters[0] = 1; parameters[1] = 2; double a = myWeb.resultString(url,className,methodName,parameters); MessageBox.Show(a.ToString()); } 以上是主程序中的代码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |