winform中对webservice的调用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

winform中对webservice的调用

一般情况下winform调用webservice时步骤

1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用

让环境来为我们生成服务代理,然后调用对应的Web服务。

如果需要动态调用WebService,要实现这样的功能:publicstaticobjectInvokeWebService(stringurl, stringmethodname,object[] args) 其中,url是Web服务的地址,methodname是要调用服务方法名,args是要调用Web服务所需的参数,返回值就是web服务返回的结果了。

要实现这样的功能,你需要这几个方面的技能:反射、CodeDom、编程使用C#编译器、WebService。在了解这些知识后,就可以容易的实现web服务的动态调用了:

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

using System.IO;

using ;

usingSystem.CodeDom;

piler;

usingSystem.Web.Services.Description;

usingMicrosoft.CSharp;

namespaceNetbankTMP

{

public static class WebServiceHelper

{

///

/// 动态调用WebService

///

/// WebService地址

/// 方法名(模块名)

/// 参数列表,无参数为null

/// object

public static object InvokeWebService(string url, string methodname, object[] args) {

returnInvokeWebService(url, null, methodname, args);

}

///

/// 动态调用WebService

///

/// WebService地址

/// 类名

/// 方法名(模块名)

/// 参数列表

/// object

public static object InvokeWebService(string url, string classname, string methodname, object[] args)

{

string @namespace = "bank.WebService.webservice";

if (classname == null || classname == "")

{

classname = WebServiceHelper.GetClassName(url);

}

//获取服务描述语言(WSDL)

WebClientwc = new WebClient();

Stream stream = wc.OpenRead(url+"?WSDL");//【1】

ServiceDescriptionsd = ServiceDescription.Read(stream);//【2】ServiceDescriptionImportersdi = new ServiceDescriptionImporter();//【3】

sdi.AddServiceDescription(sd, "", "");

CodeNamespacecn = new CodeNamespace(@namespace);//【4】

//生成客户端代理类代码

CodeCompileUnitccu = new CodeCompileUnit();//【5】

spaces.Add(cn);

sdi.Import(cn, ccu);

CSharpCodeProvidercsc = new CSharpCodeProvider();//【6】

ICodeCompilericc = csc.CreateCompiler();//【7】

//设定编译器的参数

CompilerParameterscplist = new CompilerParameters();//【8】

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");

//编译代理类

CompilerResultscr = pileAssemblyFromDom(cplist, ccu);//【9】

if (true == cr.Errors.HasErrors)

{

System.Text.StringBuildersb = new StringBuilder();

foreach (CompilerErrorce in cr.Errors)

{

sb.Append(ce.ToString());

sb.Append(System.Environment.NewLine);

}

throw new Exception(sb.ToString());

}

//生成代理实例,并调用方法

System.Reflection.Assembly assembly = piledAssembly;

相关文档
最新文档