现在动态调用从C#的 webservice代码能运行,但是调用java webservice就不行。
关键就是代码内红色地方,命名空间在java里没有命名空间,不知道怎么解决?
//动态调用web服务
   public static object InvokeWebService(string url, string methodname, object[] args)
   {
   return WebServiceHelper.InvokeWebService(url, null, methodname, args);
   }   public static object InvokeWebService(string url, string classname, string methodname, object[] args)
   {
   string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
   if ((classname == null) || (classname == ""))
   {
   classname = WebServiceHelper.GetWsClassName(url);
   }   try
   {
   ////获取Web Service描述
   WebClient wc = new WebClient();
   Stream stream = wc.OpenRead(url + "?wsdl"); //一定要以?wsdl结尾
   ServiceDescription sd = ServiceDescription.Read(stream);
   ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
   sdi.ProtocolName = "soap";
   sdi.Style = ServiceDescriptionImportStyle.Client;   
  sdi.AddServiceDescription(sd, "", "");   //指定命名空间   
  CodeNamespace cn = new CodeNamespace(@namespace);   //生成客户端代理类代码
   CodeCompileUnit ccu = new CodeCompileUnit();
   ccu.Namespaces.Add(cn);
   sdi.Import(cn, ccu);
   //建立C#编译器   
 CSharpCodeProvider csc = new CSharpCodeProvider();
   ICodeCompiler icc = csc.CreateCompiler();   //设定编译参数
   CompilerParameters cplist = new CompilerParameters();
   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");   //编译代理类
   CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
   if (true == cr.Errors.HasErrors)
   {
   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
   {
   sb.Append(ce.ToString());
   sb.Append(System.Environment.NewLine);
   }
   throw new Exception(sb.ToString());
   }   //生成代理实例,并调用方法
   //获取程序集   
  System.Reflection.Assembly assembly = cr.CompiledAssembly;   //获取程序集类型     
  Type t = assembly.GetType(@namespace + "." + classname, true, true);
   object obj = Activator.CreateInstance(t);
   //获取方法   
  System.Reflection.MethodInfo mi = t.GetMethod(methodname);
   //调用方法     
   return mi.Invoke(obj, args);
   }
   catch (Exception ex)
   {
   throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
   }
   }   private static string GetWsClassName(string wsUrl)
   {
   string[] parts = wsUrl.Split('/');
   string[] pps = parts[parts.Length - 1].Split('.');   return pps[0];
   }   }