博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态使用webservice,以及含有ref类型的参数的问题
阅读量:5968 次
发布时间:2019-06-19

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

public class WSHelper    {        /// < 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, Type[] arrytype)        {            return WSHelper.InvokeWebService(url + "/Services/ExcelAddIns.asmx", null, methodname, args, arrytype);        }        /// < 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, Type[] arrytype)        {            string @namespace = "OGC_Addin.Class";            if ((classname == null) || (classname == ""))            {                classname = WSHelper.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;                if (arrytype.Length > 0)                {                    mi = t.GetMethod(methodname, arrytype);                }                else                {                    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];        }    } //---------------------------------------------------------- //参数传递方式         public int ApproveTestReportByHHX(string SeverUrl, int testReportId, string UId, ref string msg)         {
            int tem =0;             object[] para_arry = new object[3];             para_arry[0] = testReportId;             para_arry[1] = UId;             para_arry[2] = msg;             Type[] type_arry = new Type[] {             typeof(int),             typeof(string),             typeof(string).MakeByRefType()             };             tem =(bool) WSHelper.InvokeWebService(SeverUrl, "ApproveReportByHHX", para_arry, type_arry)?1:0;             //Ogcis_Server.ExcelAddInsSoapClient soap = new Ogcis_Server.ExcelAddInsSoapClient();             //tem = soap.ApproveReportByHHX(testReportId, UId, ref msg);             msg=para_arry[2].ToString();             return tem;         }

 

转载于:https://www.cnblogs.com/muxueyuan/p/5909624.html

你可能感兴趣的文章
源码编译 MySQL 完整配置选项
查看>>
从网上搜索到的虚拟化笔记
查看>>
我的友情链接
查看>>
jq实现跳转404跳转,原生js实现跳转404跳转
查看>>
配置maven nenux仓库
查看>>
js setTimeout()的使用
查看>>
Hadoop和大数据:60款顶级开源工具
查看>>
高可用集群中的选举机制
查看>>
江苏理工学院计算学院实验教学管理系统[.NET项目]
查看>>
bash编程总结
查看>>
Android中进程间通讯 AIDL
查看>>
rcp errata
查看>>
Kotlin 与 Java 8 的重要新特性以及 Java 9、10 的发展规划
查看>>
垂直居中实现方式总结
查看>>
在 Cent OS 6.5 中安装桌面环境
查看>>
办公室网络打印机的连接
查看>>
微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆
查看>>
TiDB 架构及设计实现
查看>>
logstash解析系统的messages日志
查看>>
nginx+keepalived 高可用
查看>>