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()); }
以上是主程序中的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。