【转】读取webservice中的方法、参数以及参数类型

Posted by & filed under Uncategorized.

操作步骤: 1、用流得到webservice 2、将得到的webservice转换成WDSL文档 3、将文档解析成dll 4、用类反射,得到方法以及方法的参数和参数类型 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Net; using System.CodeDom; using System.CodeDom.Compiler; using System.Web.Services; using System.Web.Services.Description; using System.Web.Services.Protocols; using System.Xml.Serialization; using System.Reflection; public class WebServicePlugins {         //得到所有的方法 public string pluginsCount(string url) { Dictionary<string, object> retObj = new Dictionary<string, object>(); //使用WebClient下载WSDL WebClient web = new WebClient(); Stream stream = web.OpenRead(url); List<string> list = new List<string>(); //创建和格式化WSDL文档 ServiceDescription description = ServiceDescription.Read(stream); int pluginsC = description.PortTypes[0].Operations.Count;//方法个数 for (var i = 0; i < pluginsC; i++) { //retObj[“key”] = description.PortTypes[0].Operations[i].Name;//方法名称 //retObj[“value”] = i; string name = description.PortTypes[0].Operations[i].Name;//方法名称 //string val = i.ToString(); //retObj[name] = retObj[name]; int flag = 0; foreach (KeyValuePair<string, object> ret in retObj) { string str = ret.Key.ToString(); if (str == name) { flag++; } } if (flag == 0) { retObj.Add(name, name); } //list.Add(name); }             return JavaScriptConvert.SerializeObject(retObj); //return list; }         //根据方法名字得到所有的参数和参数类型 public string pluginsParameter(string url, string plugins) { Dictionary<string, object> retObj = new Dictionary<string, object>(); //使用WebClient下载WSDL WebClient web = new WebClient(); Stream stream = web.OpenRead(url);             //创建和格式化WSDL文档 ServiceDescription description = ServiceDescription.Read(stream);             //创建客户端代理类 ServiceDescriptionImporter importer = new ServiceDescriptionImporter();             importer.ProtocolName = “Soap”;//指定访问协议 importer.Style = ServiceDescriptionImportStyle.Client;//生成客户端代理 importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;             importer.AddServiceDescription(description, null, null);//添加WSDL文档             //使用CodeDome编译客户端代理类 CodeNamespace nmspace = new CodeNamespace();//为代理添加命名空间,缺省为全局空间 CodeCompileUnit unit = new CodeCompileUnit(); unit.Namespaces.Add(nmspace);             ServiceDescriptionImportWarnings warnimg = importer.Import(nmspace, unit); CodeDomProvider provider = CodeDomProvider.CreateProvider(“CSharp”);             CompilerParameters parameter = new CompilerParameters(); parameter.GenerateExecutable = false; parameter.GenerateInMemory = true; parameter.IncludeDebugInformation = true; parameter.OutputAssembly = @”d:\test.dll”;//可以指定你所需的任何文件名 parameter.ReferencedAssemblies.Add(“System.dll”); parameter.ReferencedAssemblies.Add(“System.XML.dll”); parameter.ReferencedAssemblies.Add(“System.Web.Services.dll”); parameter.ReferencedAssemblies.Add(“System.Data.dll”); CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);             if (result.Errors.HasErrors) { //显示编译错误信息 } Assembly asm = Assembly.LoadFrom(@”d:\test.dll”); Type t = asm.GetType(“WebService”);             object o = Activator.CreateInstance(t); //HelloWorld MethodInfo method = t.GetMethod(plugins);             int pluginsParamCount = method.GetParameters().Length;////参数个数 for (int i = 0; i < pluginsParamCount; i++) { //retObj[“key”] = method.GetParameters()[i].Name;//参数名称 //retObj[“value”] = method.GetParameters()[i].ParameterType.Name;//参数类型 //retObj[method.GetParameters()[i].Name] = retObj[method.GetParameters()[i].ParameterType.Name]; retObj.Add(method.GetParameters()[i].Name, method.GetParameters()[i].ParameterType.Name.ToLower()); }             return JavaScriptConvert.SerializeObject(retObj); } } } Read more […]

[转] Easyui 页面访问慢解决方案,GZIP网站压缩加速优化

Posted by & filed under Uncategorized.

GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量。 具体代码可以参加jeecg快速开发平台的实现; 通过资源压缩拦截器,减少带宽访问 参考代码:   [html] view plaincopy /**    * JS缓存压缩    * JEECG开源社区    * 论坛:www.jeecg.org    * @author  张代浩    */   public class GZipFilter implements Filter {                 public void destroy() {       }         /**          * 判断浏览器是否支持GZIP          * @param request          * @return          */         private static boolean isGZipEncoding(HttpServletRequest request){           boolean flag=false;           String encoding=request.getHeader(“Accept-Encoding”);             //update-begin–Author:JueYue  Date:20140518 for:IE下Excel上传encode为空的bug——————–           if(encoding!=null&&encoding.indexOf(“gzip”)!=-1){             flag=true;           }             //update-end–Author:JueYue  Date:20140518 for:IE下Excel上传encode为空的bug——————–            return flag;         }                public void doFilter(ServletRequest request, ServletResponse response,               FilterChain chain) throws IOException, ServletException {           HttpServletResponse resp = (HttpServletResponse) response;           HttpServletRequest req=(HttpServletRequest)request;           if(isGZipEncoding(req)){               Wrapper wrapper = new Wrapper(resp);               chain.doFilter(request, wrapper);               byte[] gzipData = gzip(wrapper.getResponseData());               resp.addHeader(“Content-Encoding”, “gzip”);               resp.setContentLength(gzipData.length);               //静态资源文件缓存机制               //CacheResource(request, response, chain);               ServletOutputStream output = response.getOutputStream();               output.write(gzipData);               output.flush();           } else {               chain.doFilter(request, response);           }                  }          public void init(FilterConfig filterConfig) throws ServletException {}              /**        * 提高系统访问性能,主键缓存        */       public void CacheResource(ServletRequest request, ServletResponse response,               FilterChain chain){           //1.强转httpservlet,方便调用方法              HttpServletRequest req = (HttpServletRequest) request;             HttpServletResponse res = (HttpServletResponse) response;             //2.获取资源文件名的URI              String uri = req.getRequestURI();             //3.获得文件扩展名,lastIndexOf(“.”)+1 获得.最后一次出现的索引的后一位:jpg              uri = uri.substring(uri.lastIndexOf(“.”)+1);             System.out.println( uri );//测试获取后缀是否正确              //4断相应后缀文件,设定缓存时间              long date = 0;             //System.out.println( new Date().getTime());//测试当前时间用                           //判断URI获取的后缀名是否与JPG相等,不考虑大小写              if(uri.equalsIgnoreCase(“jpg”)){                 //读取XML里的JPG配置的参数,这里设定了时间                  //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒                  date = System.currentTimeMillis()+5*60*60*1000;             }                          if(uri.equalsIgnoreCase(“gif”)){                 //读取XML里的JPG配置的参数,这里设定了时间                  //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒                  date = System.currentTimeMillis()+5*60*60*1000;             }                          if(uri.equalsIgnoreCase(“css”)){                 //读取XML里的JPG配置的参数,这里设定了时间                  //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒                  date = System.currentTimeMillis()+5*60*60*1000;             }                          if(uri.equalsIgnoreCase(“js”)){                 //读取XML里的JPG配置的参数,这里设定了时间                  //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒                  date = System.currentTimeMillis()+5*60*60*1000;             }             //设置缓存时间              res.setDateHeader(“Expires”, date);         }          private byte[] gzip(byte[] data) {           ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);           GZIPOutputStream output = null;           try {               output = new GZIPOutputStream(byteOutput);               output.write(data);           } catch (IOException e) {           } finally {               try {                   output.close();               } catch (IOException e) {               }           }           return byteOutput.toByteArray();       }      } Read more […]

SqlServer 分页存储过程

Posted by & filed under Uncategorized.

create proc [dbo].[proc_Opinion_BaseInfo] @TableName varchar(4000), @PkField varchar(100), @PageIndex int=1, @PageSize int=10, @SqlWhere nvarchar(4000), @RowCount bigint output, @PageCount bigint output as if(@SqlWhere=’1′) set @SqlWhere = ‘1=1’ declare @sql nvarchar(4000),@start int,@end int set @sql=’select * from (select Row_NUMBER() OVER(order by ‘+@PkField+’ desc) rowId,* from ‘+@TableName+’ where ‘+@SqlWhere set @start = (@PageIndex-1)*@PageSize+1 set @end = @start+@PageSize-1 set @sql = @sql + ‘) t where rowId between ‘+CAST(@start as varchar(20))+’ and ‘ +CAST(@end as varchar(20)) exec (@sql) set @sql = ‘select @RowCount=count(1) from ‘+@TableName+’ where ‘+@SqlWhere exec sp_executesql @sql,N’@RowCount bigint OUTPUT’,@RowCount OUTPUT if(@RowCount%@PageSize=0) begin set Read more […]

mysql 分页存储过程

Posted by & filed under Uncategorized.

CREATE PROCEDURE P_viewPage( $TableName VARCHAR(200), $FieldList VARCHAR(2000), $PrimaryKey VARCHAR(100), $Where VARCHAR(1000) charset ‘gbk’,   $Order VARCHAR(1000), $SortType INT, $RecorderCount INT, $PageSize INT, $PageIndex INT, OUT    $TotalCount INTEGER, OUT    $TotalPageCount INTEGER ) BEGIN IF !(($TableName is null OR $TableName=”) OR ($FieldList is null OR $FieldList=”) OR ($PrimaryKey is null OR $PrimaryKey=”) OR $SortType < 1 OR $SortType >3 OR $RecorderCount < 0 OR $PageSize < 0 OR $PageIndex < 0) THEN IF ($where is null OR $where=”) THEN SET @new_where1 = ‘ ‘ ; SET @new_where2 = ‘ WHERE ‘ ; ELSE SET @new_where1 =concat(‘ WHERE ‘,$where); SET @new_where2 =concat(‘ WHERE ‘,$where,’ Read more […]

[转] 查看MSSQL 加密存储过程

Posted by & filed under Uncategorized.

–解密存储过程 CREATE  PROCEDURE sp_decrypt(@objectName varchar(50)) AS begin set nocount on –CSDN:j9988 copyright:2004.04.15 –V3.1 –破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 –修正上一版视图触发器不能正确解密错误 –发现有错,请E_MAIL:CSDNj9988@tom.com begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000) DECLARE  @OrigSpText1 nvarchar(4000),  @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare  @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj Read more […]

[转]CSS浏览器兼容问题

Posted by & filed under Uncategorized.

CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE 影响 CSS处理,作为W3C的标准,一定要加 DOCTYPE声名.  CSS技巧 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 2. margin加倍的问题设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline; 例如: <#div id=”imfloat”> 相应的css为 #IamFloat{ float:left; margin:5px;/*IE下理解为10px*/display:inline;/*IE下再理解为5px*/} 3.浮动ie产生的双倍距离 #box{ Read more […]