C# 动态调用WebService的示例
WebServiceHelper代码:
usingMicrosoft.CSharp;
usingSystem;
usingSystem.CodeDom;
usingSystem.CodeDom.Compiler;
usingSystem.Collections.Generic;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Net;
usingSystem.Reflection;
usingSystem.Text;
usingSystem.Web.Services.Description;
usingSystem.Xml.Serialization;
namespaceSunCreate.HaiKang8600WebService.Utils
{
///
///动态调用WebService
///
publicstaticclassWebServiceHelper
{
///
///动态调用WebService
///
///WebService地址
///命名空间
///类名
///方法名(模块名)
///参数列表
publicstaticobjectInvokeWebService(stringurl,stringstrNamespace,stringclassName,stringmethodName,object[]args)
{
try
{
WebClientwebClient=newWebClient();
Streamstream=webClient.OpenRead(url);//获取服务描述语言(WSDL)
ServiceDescriptionserviceDescription=ServiceDescription.Read(stream);//通过直接从Stream实例加载XML来初始化ServiceDescription类的实例。
ServiceDescriptionImporterserviceDescriptionImporter=newServiceDescriptionImporter();
serviceDescriptionImporter.AddServiceDescription(serviceDescription,null,null);
//生成客户端代理类代码
CodeNamespacecodeNamespace=newCodeNamespace(strNamespace);//CodeNamespace表示命名空间声明。
CodeCompileUnitcodeCompileUnit=newCodeCompileUnit();
codeCompileUnit.Namespaces.Add(codeNamespace);
serviceDescriptionImporter.Import(codeNamespace,codeCompileUnit);
CSharpCodeProvidercsharpCodeProvider=newCSharpCodeProvider();
ICodeCompileriCodeCompiler=csharpCodeProvider.CreateCompiler();//取得C#程式码编译器的执行个体
//设定编译器的参数
CompilerParameterscompilerParameters=newCompilerParameters();//创建编译器的参数实例
compilerParameters.GenerateExecutable=false;
compilerParameters.GenerateInMemory=true;
compilerParameters.ReferencedAssemblies.Add("System.dll");
compilerParameters.ReferencedAssemblies.Add("System.XML.dll");
compilerParameters.ReferencedAssemblies.Add("System.Web.Services.dll");
compilerParameters.ReferencedAssemblies.Add("System.Data.dll");
//编译代理类
CompilerResultscompilerResults=iCodeCompiler.CompileAssemblyFromDom(compilerParameters,codeCompileUnit);
if(true==compilerResults.Errors.HasErrors)
{
StringBuildersb=newStringBuilder();
foreach(CompilerErrorceincompilerResults.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
thrownewException(sb.ToString());
}
//生成代理实例,并调用方法
System.Reflection.Assemblyassembly=compilerResults.CompiledAssembly;
Typetype=assembly.GetType(strNamespace+"."+className,true,true);
objectobj=Activator.CreateInstance(type);
System.Reflection.MethodInfomethodInfo=type.GetMethod(methodName);//MethodInfo的实例可以通过调用GetMethods或者Type对象或派生自Type的对象的GetMethod方法来获取,还可以通过调用表示泛型方法定义的MethodInfo的MakeGenericMethod方法来获取。
returnmethodInfo.Invoke(obj,args);
}
catch(Exceptionex)
{
LogUtil.LogError(ex,"动态调用WebService错误");
returnnull;
}
}
}
}
使用示例:
stringurl="http://172.16.36.26:8080/attachment/services/AttachmentService?wsdl"; object[]args=newobject[2]; args[0]="1"; args[1]="1"; objectstr=WebServiceHelper.InvokeWebService(url,"service.webservice","AttachmentService","checkGrade",args); stringsstr=str.ToString();
以上就是C#动态调用WebService的示例的详细内容,更多关于C#动态调用WebService的资料请关注毛票票其它相关文章!