C# 动态调用Web Service的方法如下,其中URL是在App.config文件中配置的
- <?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];
- }
- }
转载于:https://blog.51cto.com/liuqc/648581