高手些多多包函,主要是给用得着的人参考一下,互相学习.代码主要是用了 System.Web.Services.Description里的东西
public static object InvokeMethod(string nameSpace, string className, string methodName, object[] param) { System.Net.WebClient client = new System.Net.WebClient(); String url = System.Configuration.ConfigurationManager.ConnectionStrings["serviceAddress"].ConnectionString;//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL System.IO.Stream stream = client.OpenRead(url); System.Web.Services.Description.ServiceDescription description = System.Web.Services.Description.ServiceDescription.Read(stream); System.Web.Services.Description.ServiceDescriptionImporter importer = new System.Web.Services.Description.ServiceDescriptionImporter();//创建客户端代理代理类。 importer.ProtocolName = "Soap"; //指定访问协议。 importer.Style = System.Web.Services.Description.ServiceDescriptionImportStyle.Client; //生成客户端代理。 importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties | System.Xml.Serialization.CodeGenerationOptions.GenerateNewAsync; importer.AddServiceDescription(description, null, null); //添加WSDL文档。 System.CodeDom.CodeNamespace nmspace = new System.CodeDom.CodeNamespace(); //命名空间 nmspace.Name = nameSpace; System.CodeDom.CodeCompileUnit unit = new System.CodeDom.CodeCompileUnit(); unit.Namespaces.Add(nmspace); System.Web.Services.Description.ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit); System.CodeDom.Compiler.CodeDomProvider provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp"); System.CodeDom.Compiler.CompilerParameters parameter = new System.CodeDom.Compiler.CompilerParameters(); parameter.GenerateExecutable = false; parameter.OutputAssembly = "TempClass.dll";//输出程序集的名称 parameter.ReferencedAssemblies.Add("System.dll"); parameter.ReferencedAssemblies.Add("System.XML.dll"); parameter.ReferencedAssemblies.Add("System.Web.Services.dll"); parameter.ReferencedAssemblies.Add("System.Data.dll"); System.CodeDom.Compiler.CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit); if (result.Errors.HasErrors) { // 显示编译错误信息 } System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom("TempClass.dll");//加载前面生成的程序集 Type t = asm.GetType(nameSpace + "." + className); object o = Activator.CreateInstance(t); System.Reflection.MethodInfo method = t.GetMethod(methodName);//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下 object item = method.Invoke(o, param); //注:method.Invoke(o, null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o, null)转一下就行了 return item; }