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的资料请关注毛票票其它相关文章!