读书人

C# 动态调用Webservice 速度慢解决办法

发布时间: 2012-07-30 16:19:05 作者: rapoo

C# 动态调用Webservice 速度慢
下面的代码调试通过,与大家分享。
不过执行速度比较慢,调用一次一般要3-4秒。

请大家给点建议或分析下原因。

谢谢。

C# code
try            {                // 获取WSDL                WebClient wc = new WebClient();                Stream stream = wc.OpenRead(url + "?WSDL");                ServiceDescription sd = ServiceDescription.Read(stream);                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                sdi.AddServiceDescription(sd, "", "");                CodeNamespace cn = new CodeNamespace(@namespace);                // 生成客户端代理类代码                CodeCompileUnit ccu = new CodeCompileUnit();                ccu.Namespaces.Add(cn);                sdi.Import(cn, ccu);                CSharpCodeProvider icc = new CSharpCodeProvider();                // 设定编译参数                CompilerParameters cplist = new CompilerParameters();                cplist.GenerateExecutable = false;                cplist.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");                // 编译代理类                CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);                // 抛出异常                if (cr.Errors.HasErrors)                {                    StringBuilder sb = new StringBuilder();                    foreach (CompilerError ce in cr.Errors)                    {                        sb.Append(ce.ToString());                        sb.Append(System.Environment.NewLine);                    }                    throw new Exception(sb.ToString());                }                // 生成代理实例,并调用方法                System.Reflection.Assembly assembly = cr.CompiledAssembly;                Type t = assembly.GetType(@namespace + "." + classname, true, true);                object obj = Activator.CreateInstance(t);                System.Reflection.MethodInfo mi = t.GetMethod(methodname);                return mi.Invoke(obj, args);            }            catch (Exception ex)            {                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));            }


[解决办法]
动态编译?这样能快就奇怪了。
[解决办法]
正常

读书人网 >C#

热点推荐