usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingSystem.CodeDom.Compiler;usingSystem.Reflection;usingSystem.Web.Services.Description;usingSystem.Xml.Serialization;usingSystem.CodeDom;namespaceCN100.Member.Utility{publicclassWebServiceHelper{privatestaticWebServiceHelperwebService=null;publicstaticWebServiceHelperInstance(stringwebServiceUrl,stringNamSpace){if(webService==null){webService=newWebServiceHelper(webServiceUrl,NamSpace);}returnwebService;}privateWebServiceHelper(){}///<summary>///webService地址///</summary>publicstringServerUrl{get;set;}///<summary>///调用类命名空间///</summary>publicstringNameSpace{get;set;}privateWebServiceHelper(stringwebServiceUrl,stringnamSpace){ServerUrl=webServiceUrl;NameSpace=namSpace;}///<summary>///生成动态引用DLL///</summary>///<returns></returns>publicboolGenerateWebService(){WebClientclient=newWebClient();Stringurl=ServerUrl+"?WSDL";//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上:?WSDLStreamstream=client.OpenRead(url);ServiceDescriptiondescription=ServiceDescription.Read(stream);ServiceDescriptionImporterimporter=newServiceDescriptionImporter();//创建客户端代理代理类。importer.ProtocolName="Soap";//指定访问协议。importer.Style=ServiceDescriptionImportStyle.Client;//生成客户端代理。importer.CodeGenerationOptions=CodeGenerationOptions.GenerateProperties|CodeGenerationOptions.GenerateNewAsync;importer.AddServiceDescription(description,null,null);//添加WSDL文档。CodeNamespacenmspace=newCodeNamespace();//命名空间nmspace.Name=NameSpace;CodeCompileUnitunit=newCodeCompileUnit();unit.Namespaces.Add(nmspace);ServiceDescriptionImportWarningswarning=importer.Import(nmspace,unit);CodeDomProviderprovider=CodeDomProvider.CreateProvider("CSharp");CompilerParametersparameter=newCompilerParameters();parameter.GenerateExecutable=false;parameter.OutputAssembly=NameSpace+".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");CompilerResultsresult=provider.CompileAssemblyFromDom(parameter,unit);if(result.Errors.HasErrors){//显示编译错误信息returnfalse;}returntrue;}privateAssemblyLoadAssembly(stringnameSpace){Assemblyasm=null;try{asm=Assembly.LoadFrom(nameSpace+".dll");//加载前面生成的程序集}catch(FileNotFoundExceptionex){if(GenerateWebService()){asm=Assembly.LoadFrom(nameSpace+".dll");//加载前面生成的程序集}}catch(Exceptione){throwe;}returnasm;}///<summary>///执行无返回值方法///</summary>///<paramname="methodName"></param>///<paramname="nameSpace"></param>///<paramname="args"></param>publicvoidExcuteMethod(stringmethodName,stringnameSpace,object[]args){Assemblyasm=LoadAssembly(nameSpace);Typet=asm.GetType(nameSpace);objecto=Activator.CreateInstance(t);MethodInfomethod=t.GetMethod(methodName);method.Invoke(o,args);}publicvoidExcuteMethod(stringmethodName,object[]args){stringnameSpace=NameSpace;ExcuteMethod(methodName,nameSpace,args);}///<summary>///执行带返回值方法///</summary>///<typeparamname="T"></typeparam>///<paramname="methodName"></param>///<paramname="nameSpace"></param>///<paramname="args"></param>///<returns></returns>publicTExcuteMethod<T>(stringmethodName,stringnameSpace,object[]args){Assemblyasm=LoadAssembly(nameSpace);Typet=asm.GetType(nameSpace);objecto=Activator.CreateInstance(t);MethodInfomethod=t.GetMethod(methodName);Tresult=(T)method.Invoke(o,args);returnresult;}publicTExcuteMethod<T>(stringmethodName,object[]args){stringnameSpace=NameSpace;returnExcuteMethod<T>(methodName,nameSpace,args);}}}