zoukankan      html  css  js  c++  java
  • webservice动态加载

    动态加载WebService

    /// <summary>
            /// 动态获取webservice
            /// </summary>
            /// <param name="url">地址后缀加?WSDL</param>
            /// <param name="nspace">命名空间</param>
            /// <param name="functionName">接口名称</param>
            /// <param name="para">参数object[]</param>
            /// <returns></returns>
            public static string WebServiceDes(string url,string nspace, string functionName,object[] para=null)
            {
                WebClient web = new WebClient();
                Stream stream = web.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 文档。
    
                // 4使用 CodeDom 编译客户端代理类。
                CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
                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);
                // 使用 Reflection 调用 WebService。
                if (!result.Errors.HasErrors)
                {
                    Assembly asm = result.CompiledAssembly;
                    Type t = asm.GetType(nspace); // 如果在前面为代理类添加了命名空间,此处需要将命名空间添加到类型前面。
    
                    object o = Activator.CreateInstance(t);
                    MethodInfo method = t.GetMethod(functionName);
                    try
                    {
                        string jsonstr = method.Invoke(o, para).ToString();
                        return jsonstr;
                    }
                    catch (Exception)
                    {
    
                        return "请检查接口是否正确!";
                    }
                    
                    
                }
                else
                {
                    return "请检查接口是否正确!";
                }
            }
    

     东西还是记录下来比较好,写过一次在想看要找好长时间。。

  • 相关阅读:
    ajax发送cookies
    关于几个入口
    关于.net的概念
    codeproject
    Chrome extension
    modern web application
    JavaScript类型转换
    js方法在iframe父子窗口
    javascript book
    MVC Controller
  • 原文地址:https://www.cnblogs.com/yeyuqian/p/14365786.html
Copyright © 2011-2022 走看看