动态调用Web Service

代码
 System.Net.WebClient wc = new System.Net.WebClient();
        System.IO.Stream stream 
= wc.OpenRead("http://localhost:44763/Jquery/DynamicInvoke.asmx?WSDL");
        
//获取Web服务描述
        System.Web.Services.Description.ServiceDescription sd =System.Web.Services.Description.ServiceDescription.Read(stream);
        System.Web.Services.Description.ServiceDescriptionImporter sdi 
= new System.Web.Services.Description.ServiceDescriptionImporter();
        sdi.AddServiceDescription(sd, 
"""");
        System.CodeDom.CodeNamespace ns 
= new System.CodeDom.CodeNamespace();
        System.CodeDom.CodeCompileUnit cu 
= new System.CodeDom.CodeCompileUnit();
        cu.Namespaces.Add(ns);
        sdi.Import(ns, cu);
//导入指定的web服务描述
        
//创建csharp代码提供程序
        Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
        
//创建csharp代码编译器
        System.CodeDom.Compiler.ICodeCompiler compiler = provider.CreateCompiler();

        
//调用参数设置
        System.CodeDom.Compiler.CompilerParameters parms = new System.CodeDom.Compiler.CompilerParameters();
        parms.GenerateExecutable 
= false;
        parms.GenerateInMemory 
= true;

        parms.ReferencedAssemblies.Add(
"System.dll");
        parms.ReferencedAssemblies.Add(
"System.XML.dll");
        parms.ReferencedAssemblies.Add(
"System.Web.Services.dll");
        parms.ReferencedAssemblies.Add(
"System.Data.dll");

        
//生成程序集
        System.CodeDom.Compiler.CompilerResults result = provider.CompileAssemblyFromDom(parms, cu);
        
if (true == result.Errors.HasErrors)
        {
 
        }

        System.Reflection.Assembly assembly 
= result.CompiledAssembly;
        Type t 
= assembly.GetType("DynamicInvoke"truetrue);
        
object obj = Activator.CreateInstance(t);
        System.Reflection.MethodInfo mi 
= t.GetMethod("HelloWorld");
        Response.Write(mi.Invoke(obj, 
null));

 

posted @ 2010-01-05 15:57  孤城浪子  阅读(320)  评论(0编辑  收藏  举报
博客园,让我更上一层楼