问题描述
现在地址不明确.无法通过添加Web引用来调用.如何根据参数地址动态的调用JavaXFireWebService
解决方案
解决方案二:
有测试用的webservice么如果不能添加web引用的话是调用不了的添加引用后项目会根据webservice生成一些方法声明什么的只要webservice方法不改变可以更换webservice地址如果方法改变了就得刷新web引用了生成对象后可以指定webservice的url这个地址可以设置在config里面了如果都没法引用就不能生成webservice对象就没办法了
解决方案三:
这个比较简单。在配置档里对这个Webservices类的对象的url,进行重新指向就行了。
解决方案四:
publicstaticobjectInvokeWebService(stringurl,stringmethodname,object[]args)
其中,url是Web服务的地址,methodname是要调用服务方法名,args是要调用Web服务所需的参数,返回值就是web服务返回的结果了。#regionInvokeWebService//动态调用web服务publicstaticobjectInvokeWebService(stringurl,stringmethodname,object[]args){returnWebServiceHelper.InvokeWebService(url,null,methodname,args);}publicstaticobjectInvokeWebService(stringurl,stringclassname,stringmethodname,object[]args){string@namespace="EnterpriseServerBase.WebService.DynamicWebCalling";if((classname==null)||(classname=="")){classname=WebServiceHelper.GetWsClassName(url);}try{//获取WSDLWebClientwc=newWebClient();Streamstream=wc.OpenRead(url+"?WSDL");ServiceDescriptionsd=ServiceDescription.Read(stream);ServiceDescriptionImportersdi=newServiceDescriptionImporter();sdi.AddServiceDescription(sd,"","");CodeNamespacecn=newCodeNamespace(@namespace);//生成客户端代理类代码CodeCompileUnitccu=newCodeCompileUnit();ccu.Namespaces.Add(cn);sdi.Import(cn,ccu);CSharpCodeProvidercsc=newCSharpCodeProvider();ICodeCompilericc=csc.CreateCompiler();//设定编译参数CompilerParameterscplist=newCompilerParameters();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=icc.CompileAssemblyFromDom(cplist,ccu);if(true==cr.Errors.HasErrors){System.Text.StringBuildersb=newSystem.Text.StringBuilder();foreach(System.CodeDom.Compiler.CompilerErrorceincr.Errors){sb.Append(ce.ToString());sb.Append(System.Environment.NewLine);}thrownewException(sb.ToString());}//生成代理实例,并调用方法System.Reflection.Assemblyassembly=cr.CompiledAssembly;Typet=assembly.GetType(@namespace+"."+classname,true,true);objectobj=Activator.CreateInstance(t);System.Reflection.MethodInfomi=t.GetMethod(methodname);returnmi.Invoke(obj,args);}catch(Exceptionex){thrownewException(ex.InnerException.Message,newException(ex.InnerException.StackTrace));}}privatestaticstringGetWsClassName(stringwsUrl){string[]parts=wsUrl.Split('/');string[]pps=parts[parts.Length-1].Split('.');returnpps[0];}#endregion
-----------------------实例:stringurl="http://www.webservicex.net/globalweather.asmx";string[]args=newstring[2];args[0]=this.textBox_CityName.Text;args[1]="China";objectresult=WebServiceHelper.InvokeWebService(url,"GetWeather",args);this.label_Result.Text=result.ToString();
http://www.webservicex.net/globalweather.asmx服务来获取各大城市的天气状况。
解决方案五:
引用3楼gongsun的回复:
C#codepublicstaticobjectInvokeWebService(stringurl,stringmethodname,object[]args)其中,url是Web服务的地址,methodname是要调用服务方法名,args是要调用Web服务所需的参数,返回值就是web服务返回的结果了。C#code#re……
这段代码我用来动态访问c#写的能。但是访问java提供的webservice的时候运行到Typet=assembly.GetType(@namespace+"."+classname,true,true);这里就报错了。目前还不知道什么原因。java不存在命名空间问题。但是该如何获取type呢?希望帮忙解答谢谢