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 "请检查接口是否正确!"; } }
东西还是记录下来比较好,写过一次在想看要找好长时间。。