加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

动态调用WEBSERVICE,减少改WS就要重新生成代理类

发布时间:2020-12-17 01:14:25 所属栏目:安全 来源:网络整理
导读:?/// summary ? ? /// WS代理帮助类 ? ? /// /summary ? ? public class WSProxyHelper ? ? { ? ? ? ? public static object InvokeWebServcieMethod(string url,string @namespace,string classname,string methodname,object[] args) ? ? ? ? { ? ? ? ? ?
?/// <summary> ? ? /// WS代理帮助类 ? ? /// </summary> ? ? public class WSProxyHelper ? ? { ? ? ? ? public static object InvokeWebServcieMethod(string url,string @namespace,string classname,string methodname,object[] args) ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? WebClient client = new WebClient(); ? ? ? ? ? ? ? ? Stream stream = client.OpenRead(url+"?WSDL"); ? ? ? ? ? ? ? ? ServiceDescription description = ServiceDescription.Read(stream); ? ? ? ? ? ? ? ? ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。 ? ? ? ? ? ? ? ? importer.ProtocolName = "Soap"; //指定访问协议。 ? ? ? ? ? ? ? ? importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。 ? ? ? ? ? ? ? ? importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; ? ? ? ? ? ? ? ? importer.AddServiceDescription(description,null,null); //添加WSDL文档。 ? ? ? ? ? ? ? ? CodeNamespace nmspace = new CodeNamespace(); //命名空间 ? ? ? ? ? ? ? ? nmspace.Name = @namespace; ? ? ? ? ? ? ? ? CodeCompileUnit unit = new CodeCompileUnit(); ? ? ? ? ? ? ? ? unit.Namespaces.Add(nmspace); ? ? ? ? ? ? ? ? ServiceDescriptionImportWarnings warning = importer.Import(nmspace,unit); ? ? ? ? ? ? ? ? CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); ? ? ? ? ? ? ? ? CompilerParameters parameter = new CompilerParameters(); ? ? ? ? ? ? ? ? parameter.GenerateInMemory = true; ? ? ? ? ? ? ? ? parameter.GenerateExecutable = false; ? ? ? ? ? ? ? ? parameter.TreatWarningsAsErrors = false; ? ? ? ? ? ? ? ? parameter.WarningLevel = 4; ? ? ? ? ? ? ? ? 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); ? ? ? ? ? ? ? ? if (result.Errors.HasErrors) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? // 显示编译错误信息 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Assembly asm = result.CompiledAssembly;// Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集 ? ? ? ? ? ? ? ? Type t = asm.GetType(@namespace + "." + classname); ? ? ? ? ? ? ? ? object o = Activator.CreateInstance(t); ? ? ? ? ? ? ? ? MethodInfo method = t.GetMethod(methodname);//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下 ? ? ? ? ? ? ? ? object item = method.Invoke(o,args); ? ? ? ? ? ? ? ? //上面是根据WebService地址,模似生成一个代理类,如果你想看看生成的代码文件是什么样子,可以用以下代码保存下来,默认是保存在bin目录下面 ? ? ? ? ? ? ? ? //TextWriter writer = File.CreateText("MyTest.cs"); ? ? ? ? ? ? ? ? //provider.GenerateCodeFromCompileUnit(unit,writer,null); ? ? ? ? ? ? ? ? //writer.Flush(); ? ? ? ? ? ? ? ? //writer.Close(); ? ? ? ? ? ? ? ? return item; ? ? ? ? ? ? } ? ? ? ? ? ? catch (Exception ex) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace)); ? ? ? ? ? ? } ? ? ? ? } ? ? }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读