微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态调用Webservice

        private object InvokeWebService(string url,string methodname,object[] args)         {             return InvokeWebService(url,null,methodname,args);         }         private object InvokeWebService(string url,string classname,object[] args)         {             string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";             if ((classname == null) || (classname == ""))             {                 classname = GetWsClassName(url);             }             try             {                 // 1. 使用 WebClient 下载 WSDL 信息。                 WebClient wClient = new WebClient();                 // 设置代理服务器                 bool useProxy = Convert.ToBoolean(Con@R_404[email protected]["UseProxy"]);                 if (useProxy)                 {                     WebProxy proxy = null;                     string proxyAddressAndPort = Con@R_404[email protected]["Proxy"];                     string proxyUserName = Con@R_404[email protected]["ProxyUserName"];                     string proxyPassword = Con@R_404[email protected]["ProxyPassword"];                     ICredentials cred;                     cred = new NetworkCredential(proxyUserName,proxyPassword);                     proxy = new WebProxy(proxyAddressAndPort,true,cred);                     WebRequest.DefaultWebProxy = proxy;                     wClient.Proxy = proxy;                 }                 Stream stream = wClient.OpenRead(url + "?WSDL");                 // 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); // 添加 WSDL 文档。                 // 4. 使用 CodeDom 编译客户端代理类。                 CodeNamespace nmspace = new CodeNamespace(@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.GenerateExecutable = false;                 parameter.GenerateInMemory = true;                 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 (true == result.Errors.HasErrors)                 {                     System.Text.StringBuilder sb = new System.Text.StringBuilder();                     foreach (System.CodeDom.Compiler.CompilerError ce in result.Errors)                     {                         sb.Append(ce.ToString());                         sb.Append(System.Environment.NewLine);                     }                     throw new Exception(sb.ToString());                 }                 // 5. 使用 Reflection 调用 WebService。                 System.Reflection.Assembly assembly = result.CompiledAssembly;                      //经过编译了的程序集类                 Type t = assembly.GetType(@namespace + "." + classname,true);                //类类型                 object obj = Activator.CreateInstance(t);                 System.Reflection.MethodInfo mi = t.getmethod(methodname);                          //方法类型                 System.Reflection.PropertyInfo pi = t.GetProperty("XXXHeaderValue");          //属性类型                 System.Reflection.Assembly assembly1 = result.CompiledAssembly;                     //经过编译了的程序集类                 Type t1 = assembly1.GetType(@namespace + "." + classname + "Header",true);   //类类型                 object obj1 = Activator.CreateInstance(t1);                 System.Reflection.PropertyInfo piUsername = t1.GetProperty("Username");             //属性类型                 System.Reflection.PropertyInfo piPassword = t1.GetProperty("Password");             //属性类型                 piUsername.SetValue(obj1,"broze",null);                 piPassword.SetValue(obj1,"jiba",null);                 pi.SetValue(obj,obj1,null);                 return mi.Invoke(obj,args);             }             catch (Exception ex)             {                 throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));             }         }         private string GetWsClassName(string wsUrl)         {             string[] parts = wsUrl.Split('/');             string[] pps = parts[parts.Length - 1].Split('.');             return pps[0];         }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐