zoukankan      html  css  js  c++  java
  • C#动态调用webservice方法

    摘 自: http://www.hao5191.cn/a/chengxukaifa/c_/20130109/115819.html

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Net; 
    using System.IO; 
    using System.CodeDom.Compiler; 
    using System.Reflection; 
    using System.Web.Services.Description; 
    using System.Xml.Serialization; 
    using System.CodeDom; 
     
    namespace CN100.Member.Utility 
    { 
        public class WebServiceHelper 
        { 
            private static WebServiceHelper webService = null; 
     
            public static WebServiceHelper Instance(string webServiceUrl, string NamSpace) 
            { 
                if (webService == null) 
                { 
                    webService = new WebServiceHelper(webServiceUrl, NamSpace); 
                } 
                return webService; 
            } 
     
            private WebServiceHelper() 
            {  
             
            } 
     
            /// <summary> 
            /// webService地址 
            /// </summary> 
            public string ServerUrl 
            { 
                get; 
                set; 
            } 
     
            /// <summary> 
            /// 调用类命名空间 
            /// </summary> 
            public string NameSpace 
            { 
                get; 
                set; 
            } 
     
            private WebServiceHelper(string webServiceUrl, string namSpace) 
            { 
                ServerUrl = webServiceUrl; 
                NameSpace = namSpace; 
            } 
     
            /// <summary> 
            /// 生成动态引用DLL 
            /// </summary> 
            /// <returns></returns> 
            public bool GenerateWebService() 
            { 
                WebClient client = new WebClient(); 
                String url = ServerUrl + "?WSDL";//这个地址可以写在Config文件里面,,这里取出来就行了.在原地址后面加上: ?WSDL 
                Stream stream = client.OpenRead(url); 
                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.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"); 
     
                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit); 
                if (result.Errors.HasErrors) 
                { 
                    // 显示编译错误信息 
                    return false; 
                } 
                return true; 
            } 
     
            private Assembly LoadAssembly(string nameSpace) 
            { 
                Assembly asm = null; 
                try 
                { 
                    asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集 
                } 
                catch (FileNotFoundException ex) 
                { 
                    if (GenerateWebService()) 
                    { 
                        asm=Assembly.LoadFrom(nameSpace + ".dll");//加载前面生成的程序集 
                    } 
                } 
                catch (Exception e) 
                { 
                    throw e; 
                } 
                return asm; 
            } 
     
            /// <summary> 
            /// 执行无返回值方法 
            /// </summary> 
            /// <param name="methodName"></param> 
            /// <param name="nameSpace"></param> 
            /// <param name="args"></param> 
            public void ExcuteMethod(string methodName,string nameSpace,params object[] args) 
            { 
                Assembly asm = LoadAssembly(nameSpace); 
                Type t = asm.GetType(nameSpace); 
                object o = Activator.CreateInstance(t); 
                MethodInfo method = t.GetMethod(methodName); 
                method.Invoke(o, args); 
            } 
     
            public void ExcuteMethod(string methodName,params object[] args) 
            { 
                string nameSpace = NameSpace; 
                ExcuteMethod(methodName, nameSpace, args); 
            } 
     
            /// <summary> 
            /// 执行带返回值方法 
            /// </summary> 
            /// <typeparam name="T"></typeparam> 
            /// <param name="methodName"></param> 
            /// <param name="nameSpace"></param> 
            /// <param name="args"></param> 
            /// <returns></returns> 
            public T ExcuteMethod<T>(string methodName, string nameSpace,params object[] args) 
            { 
                Assembly asm = LoadAssembly(nameSpace); 
                Type t = asm.GetType(nameSpace); 
                object o = Activator.CreateInstance(t); 
                MethodInfo method = t.GetMethod(methodName); 
                T result = (T)method.Invoke(o, args); 
                return result; 
            } 
     
            public T ExcuteMethod<T>(string methodName,params object[] args) 
            { 
                string nameSpace=NameSpace; 
                return ExcuteMethod<T>(methodName, nameSpace, args); 
            } 
     
        } 
    } 
  • 相关阅读:
    BIEE变量总结
    微信支付回调问题
    内网搭建WEB服务器教程(转载)
    c#简体繁体转换
    js页面之间函数调用
    数据库性能优化一:SQL索引一步到位
    EasyUI兼容IE问题
    SQL函数说明大全
    经典SQL语句大全(绝对的经典)
    Sql Server 常用系统存储过程大全
  • 原文地址:https://www.cnblogs.com/wuyifu/p/3297938.html
Copyright © 2011-2022 走看看