C# 動態調用Web Service的方法以下,其中URL是在App.config文件中配置的web
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- </configSections>
- <appSettings>
- <!--後臺服務端Web Service的URL-->
- <add key="Service_URL" value="http://localhost:8080/dwglServices/services/DealData" />
- </appSettings>
- <connectionStrings>
- <!--後端服務器數據庫配置信息-->
- <add name="ConnServerDatabase" connectionString="uid=sa;pwd=123;database=mdb;Server=192.168.18.2"/>
- <!--前臺客戶端數據庫配置信息-->
- <add name="ConnClientDatabase" connectionString="uid=sa;pwd=123;database=mdb;Server=127.0.0.1,1433"/>
- </connectionStrings>
- </configuration>
- // 3.調用Java的API接口,把數據傳遞到服務器數據庫中
- string url = ConfigurationManager.AppSettings["Service_URL"].ToString();
- string[] args = new string[1];
- args[0] = deviceData4JSON; // 傳送JSON數據格式
- object result = WebServiceHelper.InvokeWebService(url, "dealData", args);
- /// <summary>
- /// 態調用Web服務方法二:徹底動態處理,傳入服務服務網址,方法名和參數便可
- /// 調用方式:
- /// string url = "http://www.webservicex.net/globalweather.asmx";
- /// string[] args = new string[2];
- /// args[0] = "Nanjing";
- /// args[1] = "China";
- /// object result = WebServiceHelper.InvokeWebService(url,"GetWeather",args);
- /// Response.Write(result.ToString());
- /// </summary>
- public class WebServiceHelper
- {
- /// < summary>
- /// 動態調用web服務
- /// < /summary>
- /// < param name="url">WSDL服務地址< /param>
- /// < param name="methodname">方法名< /param>
- /// < param name="args">參數< /param>
- /// < returns>< /returns>
- public static object InvokeWebService(string url, string methodname, object[] args)
- {
- return WebServiceHelper.InvokeWebService(url, null, methodname, args);
- }
- /// < summary>
- /// 動態調用web服務
- /// < /summary>
- /// < param name="url">WSDL服務地址< /param>
- /// < param name="classname">類名< /param>
- /// < param name="methodname">方法名< /param>
- /// < param name="args">參數< /param>
- /// < returns>< /returns>
- 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
- {
- //獲取WSDL
- WebClient wc = new WebClient();
- Stream stream = wc.OpenRead(url + "?WSDL");
- ServiceDescription sd = ServiceDescription.Read(stream);
- ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
- sdi.AddServiceDescription(sd, "", "");
- CodeNamespace cn = new CodeNamespace(@namespace);
- //生成客戶端代理類代碼
- CodeCompileUnit ccu = new CodeCompileUnit();
- ccu.Namespaces.Add(cn);
- sdi.Import(cn, ccu);
- CSharpCodeProvider icc = new CSharpCodeProvider();
- //設定編譯參數
- 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));
- }
- }
- /// <summary>
- /// 取得Web Service類名
- /// </summary>
- /// <param name="wsUrl"></param>
- /// <returns></returns>
- private static string GetWsClassName(string wsUrl)
- {
- string[] parts = wsUrl.Split('/');
- string[] pps = parts[parts.Length - 1].Split('.');
- return pps[0];
- }
- }