C# 动态调用Web Service的方法如下,其中URL是在App.config文件中配置的

 
  
  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <configuration> 
  3.   <configSections> 
  4.   </configSections> 
  5.  
  6.   <appSettings> 
  7.     <!--后台服务端Web Service的URL--> 
  8.     <add key="Service_URL" value="http://localhost:8080/dwglServices/services/DealData" /> 
  9.   </appSettings> 
  10.     
  11.   <connectionStrings> 
  12.     <!--后端服务器数据库配置信息--> 
  13.     <add name="ConnServerDatabase" connectionString="uid=sa;pwd=123;database=mdb;Server=192.168.18.2"/> 
  14.       
  15.     <!--前台客户端数据库配置信息--> 
  16.     <add name="ConnClientDatabase" connectionString="uid=sa;pwd=123;database=mdb;Server=127.0.0.1,1433"/> 
  17.   </connectionStrings> 
  18.  
  19. </configuration> 
 
  
  1. // 3.调用Java的API接口,把数据传递到服务器数据库中  
  2.        string url = ConfigurationManager.AppSettings["Service_URL"].ToString();  
  3.        string[] args = new string[1];  
  4.        args[0] = deviceData4JSON;  // 传送JSON数据格式
  5.        object result = WebServiceHelper.InvokeWebService(url, "dealData", args); 
 
  
  1. /// <summary>  
  2.     /// 态调用Web服务方法二:完全动态处理,传入服务服务网址,方法名和参数即可  
  3.     /// 调用方式:  
  4.     ///     string url = "http://www.webservicex.net/globalweather.asmx";  
  5.     ///     string[] args = new string[2];  
  6.     ///     args[0] = "Nanjing";  
  7.     ///     args[1] = "China";  
  8.     ///     object result = WebServiceHelper.InvokeWebService(url,"GetWeather",args);  
  9.     ///     Response.Write(result.ToString());     
  10.     /// </summary>  
  11.     public class WebServiceHelper  
  12.     {  
  13.          
  14.         /// < summary>             
  15.         /// 动态调用web服务             
  16.         /// < /summary>             
  17.         /// < param name="url">WSDL服务地址< /param>             
  18.         /// < param name="methodname">方法名< /param>             
  19.         /// < param name="args">参数< /param>             
  20.         /// < returns>< /returns>   
  21.         public static object InvokeWebService(string url, string methodname, object[] args)   
  22.         {   
  23.             return WebServiceHelper.InvokeWebService(url, null, methodname, args);  
  24.         }  
  25.  
  26.         /// < summary>             
  27.         /// 动态调用web服务             
  28.         /// < /summary>             
  29.         /// < param name="url">WSDL服务地址< /param>             
  30.         /// < param name="classname">类名< /param>            
  31.         /// < param name="methodname">方法名< /param>             
  32.         /// < param name="args">参数< /param>             
  33.         /// < returns>< /returns>  
  34.         public static object InvokeWebService(string url, string classname, string methodname, object[] args)  
  35.         {  
  36.             string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";  
  37.             if ((classname == null) || (classname == ""))  
  38.             {   
  39.                 classname = WebServiceHelper.GetWsClassName(url);   
  40.             }  
  41.             try 
  42.             {  
  43.                 //获取WSDL  
  44.                 WebClient wc = new WebClient();  
  45.                 Stream stream = wc.OpenRead(url + "?WSDL");  
  46.                 ServiceDescription sd = ServiceDescription.Read(stream);  
  47.                 ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();  
  48.                 sdi.AddServiceDescription(sd, """");  
  49.                 CodeNamespace cn = new CodeNamespace(@namespace);  
  50.  
  51.                 //生成客户端代理类代码  
  52.                 CodeCompileUnit ccu = new CodeCompileUnit();  
  53.                 ccu.Namespaces.Add(cn);  
  54.                 sdi.Import(cn, ccu);  
  55.                 CSharpCodeProvider icc = new CSharpCodeProvider();  
  56.  
  57.                 //设定编译参数  
  58.                 CompilerParameters cplist = new CompilerParameters();  
  59.                 cplist.GenerateExecutable = false;  
  60.                 cplist.GenerateInMemory = true;  
  61.                 cplist.ReferencedAssemblies.Add("System.dll");  
  62.                 cplist.ReferencedAssemblies.Add("System.XML.dll");  
  63.                 cplist.ReferencedAssemblies.Add("System.Web.Services.dll");  
  64.                 cplist.ReferencedAssemblies.Add("System.Data.dll");  
  65.  
  66.                 //编译代理类  
  67.                 CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);  
  68.                 if (true == cr.Errors.HasErrors)  
  69.                 {  
  70.                     System.Text.StringBuilder sb = new System.Text.StringBuilder();  
  71.                     foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)  
  72.                     {  
  73.                         sb.Append(ce.ToString());  
  74.                         sb.Append(System.Environment.NewLine);  
  75.                     }  
  76.                     throw new Exception(sb.ToString());   
  77.                 }  
  78.  
  79.                 //生成代理实例,并调用方法  
  80.                 System.Reflection.Assembly assembly = cr.CompiledAssembly;  
  81.                 Type t = assembly.GetType(@namespace + "." + classname, truetrue);  
  82.                 object obj = Activator.CreateInstance(t);  
  83.                 System.Reflection.MethodInfo mi = t.GetMethod(methodname);  
  84.  
  85.                 return mi.Invoke(obj, args);    
  86.             }  
  87.             catch (Exception ex)  
  88.             {  
  89.                 throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));  
  90.             }  
  91.         }  
  92.  
  93.         /// <summary>  
  94.         /// 取得Web Service类名  
  95.         /// </summary>  
  96.         /// <param name="wsUrl"></param>  
  97.         /// <returns></returns>  
  98.         private static string GetWsClassName(string wsUrl)   
  99.         {   
  100.             string[] parts = wsUrl.Split('/');   
  101.             string[] pps = parts[parts.Length - 1].Split('.');   
  102.             return pps[0];   
  103.         }  
  104.  
  105.     }