科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道动态调用Webservice

动态调用Webservice

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

动态调用Webservice

作者:chinaunix 来源:chinaunix 2007年10月4日

关键字: 应用 技术 调用 中间件

  • 评论
  • 分享微博
  • 分享邮件

private object InvokeWebservice(string url, string @namespace, string classname, string methodname, object[] args)

         {

              try

              {

                   System.Net.WebClient wc = new System.Net.WebClient();

                   System.IO.Stream stream = wc.OpenRead(url+"?WSDL");

                   System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);

                   System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();

                   sdi.AddServiceDescription(sd,"","");

                   System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);

                   System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

                   ccu.Namespaces.Add(cn);

                   sdi.Import(cn,ccu);

 

                   Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();

                   System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();

 

                   System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.CompilerParameters();

                   cplist.GenerateExecutable = false;

                   cplist.GenerateInMemory = true;

                   cplist.ReferencedAssemblies.Add("System.dll");

                   cplist.ReferencedAssemblies.Add("System.XML.dll");

                   cplist.ReferencedAssemblies.Add("System.Web.Services.dll");

                   cplist.ReferencedAssemblies.Add("System.Data.dll");

 

                   System.CodeDom.Compiler.CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);

                   if(true == cr.Errors.HasErrors)

                   {

                       System.Text.StringBuilder sb = new System.Text.StringBuilder();

                       foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)

                       {

                            sb.Append(ce.ToString());

                            sb.Append(System.Environment.NewLine);

                       }

                       throw new Exception(sb.ToString());

                   }

                   System.Reflection.Assembly assembly = cr.CompiledAssembly;

                   Type t = assembly.GetType(@namespace+"."+classname,true,true);

                   object obj = Activator.CreateInstance(t);

                   System.Reflection.MethodInfo mi = t.GetMethod(methodname);

                   return mi.Invoke(obj,args);

              }

              catch(Exception ex)

              {

                   throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));

              }

         }

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章