Exemplo n.º 1
0
        /// <summary>
        /// 动态调用WebService
        /// </summary>
        /// <param name="request">WebService请求参数</param>
        /// <returns>object</returns>
        public static object InvokeWebService(this WebServiceRequest request)
        {
            var cr = request.GetCompilerResults();

            if (cr == null)
            {
                return(null);
            }

            //生成代理实例,并调用方法
            var assembly = cr.CompiledAssembly;
            var t        = assembly.GetType(request.NameSpace + "." + request.ClassName, true, true);
            var obj      = Activator.CreateInstance(t);
            var mi       = t.GetMethod(request.MethodName);

            return(mi.Invoke(obj, request.Args));
        }
Exemplo n.º 2
0
        private static CompilerResults GetCompilerResults(this WebServiceRequest request)
        {
            if (request == null)
            {
                return(null);
            }
            if (string.IsNullOrEmpty(request.ClassName))
            {
                request.ClassName = GetClassName(request.Url);
            }
            var strUrl = string.Format("{0}?wsdl", request.Url);

            if (htWebService.ContainsKey(strUrl))
            {
                return(htWebService[strUrl]);
            }


            //获取服务描述语言(WSDL)
            var wc = new WebClient();

            var stream = wc.OpenRead(strUrl);

            if (stream == null)
            {
                return(null);
            }

            var sd  = ServiceDescription.Read(stream);
            var sdi = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd, "", "");
            var cn = new CodeNamespace(request.NameSpace);

            //生成客户端代理类代码
            var ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);
            sdi.Import(cn, ccu);
            var csc = new CSharpCodeProvider();
            var icc = csc.CreateCompiler();

            //设定编译器的参数
            var cplist = new CompilerParameters {
                GenerateExecutable = false, 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");

            //编译代理类
            var cr = icc.CompileAssemblyFromDom(cplist, ccu);

            if (cr.Errors.HasErrors)
            {
                var sb = new StringBuilder();
                foreach (CompilerError ce in cr.Errors)
                {
                    sb.Append(ce);
                    sb.Append(Environment.NewLine);
                }
                throw new Exception(sb.ToString());
            }

            htWebService.Add(strUrl, cr);
            return(cr);
        }