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, string className, string methodName, 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, 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 = (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()); }
以上是主程式中的代碼。