博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net webService代理类
阅读量:5322 次
发布时间:2019-06-14

本文共 5187 字,大约阅读时间需要 17 分钟。

在平时开发过程中,经常会遇到和其他系统的对接,webService无疑是一个好的选择,我们可以选择.net自带的代理类。但是很多情况下,这并不一定是最好的选择。为此,在网上找到了一篇.net自代理类,现记录如下:

public class WebServiceHelper    {        #region InvokeWebService           /// < 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);                    /*                   PropertyInfo propertyInfo = type.GetProperty(propertyname);                   return propertyInfo.GetValue(obj, null);                   */               }               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];           }        private static string GetArgs(object [] args)        {            string strArg = string.Empty;            for (int i = 0; i < args.Length; i++)            {                strArg += " \targs [" + i + "]\t" + args[i].ToString() ;            }            return strArg;        }        #endregion       }

我们的接口调用可以采用

//获取web服务地址            string Url = System.Configuration.ConfigurationSettings.AppSettings["SMSEvaluationUrl"].ToString();            DateTime dt = DateTime.Now;            string day = dt.ToString("yyyy-MM-dd");            int hour = DateTime.Now.Hour;            object[] args = new object[] { 12346, day, hour, 1 };            string ret1 = string.Empty;            try            {                ret1 = (string)WebServiceHelper.InvokeWebService(Url, "GetReplyInfoByNum", args);            }            catch (Exception ex)            {                exceptionHandler("调用接口失败!", ex);            }            retValueHandler(ret1,args);

其中,第一个参数是需要调用的web服务的地址,第二个参数是函数名,第三个为一个object数组作为需要调用服务的参数

转载于:https://www.cnblogs.com/l919310075/p/7277907.html

你可能感兴趣的文章
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>