问题描述
代码如下:publicstaticvoidCreateWebServiceDLL(stringurl,stringmethodname,object[]args){try{//1.使用WebClient下载WSDL信息。WebClientweb=newWebClient();Streamstream=web.OpenRead(url);//2.创建和格式化WSDL文档。ServiceDescriptiondescription=ServiceDescription.Read(stream);//3.创建客户端代理代理类。ServiceDescriptionImporterimporter=newServiceDescriptionImporter();importer.ProtocolName="Soap";//指定访问协议。importer.Style=ServiceDescriptionImportStyle.Client;//生成客户端代理。importer.CodeGenerationOptions=CodeGenerationOptions.GenerateProperties|CodeGenerationOptions.GenerateNewAsync;importer.AddServiceDescription(description,null,null);//添加WSDL文档。//4.使用CodeDom编译客户端代理类。CodeNamespacenmspace=newCodeNamespace();//为代理类添加命名空间,缺省为全局空间。CodeCompileUnitunit=newCodeCompileUnit();unit.Namespaces.Add(nmspace);ServiceDescriptionImportWarningswarning=importer.Import(nmspace,unit);CodeDomProviderprovider=CodeDomProvider.CreateProvider("CSharp");CompilerParametersparameter=newCompilerParameters();parameter.GenerateExecutable=false;//parameter.GenerateInMemory=true;parameter.OutputAssembly="SFGTSJJH_WebService.dll";//可以指定你所需的任何文件名。parameter.ReferencedAssemblies.Add("System.dll");parameter.ReferencedAssemblies.Add("System.XML.dll");parameter.ReferencedAssemblies.Add("System.Web.Services.dll");parameter.ReferencedAssemblies.Add("System.Data.dll");CompilerResultsresult=provider.CompileAssemblyFromDom(parameter,unit);if(result.Errors.HasErrors){//显示编译错误信息System.Text.StringBuildersb=newStringBuilder();foreach(CompilerErrorceinresult.Errors){sb.Append(ce.ToString());sb.Append(System.Environment.NewLine);}thrownewException(sb.ToString());}//Assemblyasm=result.CompiledAssembly;Assemblyasm=Assembly.LoadFrom("SFGTSJJH_WebService.dll");Type[]ts=asm.GetTypes();Typet=asm.GetType("GtConvertDataService");objecto=Activator.CreateInstance(t);MethodInfomethod=t.GetMethod(methodname);objectfk=method.Invoke(o,args);////这里报错“调用的目标发生了异常”}catch(TargetInvocationExceptionex){stringer=ex.InnerException.ToString();throwex.InnerException;}}
调用方法的代码如下:stringurl="http://192.100.254.3:9001/ckwWebService/GtConvertData?wsdl";string[]args=newstring[1];args[0]="<?xmlversion="1.0"encoding="UTF-8"?><usermarker><conditionusername="GT000001"password="123"></condition></uermarker>";WebServiceHelper.CreateWebServiceDLL(url,"getXzcxGtList",args);
参数的数量和类型应该都是对的,这是怎么回事呢?求高人指点!!
解决方案
本帖最后由 lnn890618 于 2015-03-18 16:13:42 编辑
解决方案二:
webservice是跨语言、跨平台的拿wsdl生成代理类,调用不是很简单的麽?你哪来的搞这么复杂的一坨代码呢http://192.100.254.3:9001/ckwWebService/GtConvertData?wsdl,在浏览器是否可以正常访问?
解决方案三:
参考这个贴,一般都会成功http://bbs.csdn.net/topics/390945453