动态调用Web Service

本文展示了一种通过C#动态调用WebService的方法。利用System.Net.WebClient获取WebService的WSDL描述文件,并通过ServiceDescription读取该文件。之后使用ServiceDescriptionImporter导入Web服务描述,并生成C#代码。通过CSharpCodeProvider创建代码编译器,设置编译参数,最终成功调用了WebService中的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExpandedBlockStart.gif代码
 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));

 

转载于:https://www.cnblogs.com/trampt/archive/2010/01/05/1639707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值