Senparc.CO2NET 本地锁 锁存放容器 随机数 读取LockPool时的锁 全局静态数据源帮助类 所有数据集合的列表 本地容器缓存策略 LocalCacheStrategy的构造函数 返回指定缓存键的对象,并强制指定类型 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 领域内不同类型缓存 -> 底层(CO2NET 级别) 的映射关系 扩展缓存策略(例如RedisContainerCacheStrategy) 扩展缓存策略所使用的底层缓存策略(如RedisCacheStrategy) 构造函数 扩展缓存策略(例如RedisContainerCacheStrategy) 某一个领域内的缓存策略集合 添加或更新缓存策略映射 领域缓存仓库 获取某个领域内的所有CacheStrategyDomainMappingCollection 注册领域缓存 获取领域缓存(指定特定 的IBaseObjectCacheStrategy 缓存策略对象) IBaseObjectCacheStrategy 缓存策略对象 缓存领域 清空所有已经祖册的领域缓存对象 自动注册领域缓存 是否自动扫描全局的扩展缓存(会增加系统启动时间) 需要手动注册的扩展缓存策略 (LocalContainerCacheStrategy、RedisContainerCacheStrategy、MemcacheContainerCacheStrategy已经自动注册), 如果设置为 null(注意:不适委托返回 null,是整个委托参数为 null),则自动使用反射扫描所有可能存在的扩展缓存策略 返回所有添加的类型 扩展领域缓存策略 注意:实现此接口的类必须使用单例模式! 唯一名称(建议使用GUID) 预的名称 领域扩展(非 CO2NET 级别的缓存策略)接口,例如作为 LocalContainerCacheStrategy 的接口 注意:实现此接口的类必须使用单例模式! 领域缓存定义 使用的基础缓存策略 向底层缓存注册当前缓存策略 扩展缓存策略实例 缓存策略工厂。 缓存策略的注册(立即启用)和当前缓存策略获取 注册当前全局环境下的缓存策略,并立即启用。 如果为 null,将使用默认的本地缓存策略(LocalObjectCacheStrategy.Instance) 获取全局缓存策略 获取指定领域缓存的换存策略 领域缓存信息(需要为单例)CacheStrategyDomain 泛型缓存策略基类 获取拼装后的FinalKey 是否已经是经过拼接的FullKey 获取一个同步锁 最底层的缓存策略接口 创建一个(分布)锁 资源名称 Key标识 重试次数 重试延时 公共缓存策略接口 获取缓存中最终的键,如Container建议格式: return String.Format("{0}:{1}", "SenparcWeixinContainer", key); 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 添加指定ID的对象 缓存键 缓存值 过期时间 添加指定ID的对象 缓存键 缓存值 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 过期时间 移除指定缓存键的对象 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 返回指定缓存键的对象 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 返回指定缓存键的对象,并强制指定类型 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 获取所有缓存信息集合 检查是否存在Key及对象 缓存键 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 获取缓存集合总数(注意:每个缓存框架的计数对象不一定一致!) 更新缓存 缓存键 缓存值 是否已经是完整的Key,如果不是,则会调用一次GetFinalKey()方法 过期时间 缓存同步锁基类 立即开始锁定,需要在子类的构造函数中执行 获取最长锁定时间(锁最长生命周期) 重试次数, 最小锁定时间周期 单位:Milliseconds,毫秒 缓存锁接口 是否成功获得锁 开始锁 资源名称,即锁的标识,实际值为IBaseCacheStrategy接口中的 BeginCacheLock() 方法中的 [resourceName.key] 开始锁,并设置重试条件 资源名称,即锁的标识,实际值为IBaseCacheStrategy接口中的 BeginCacheLock() 方法中的 [resourceName.key] 重试次数 每次重试延时 释放锁 需要释放锁的 Key,即锁的标识,实际值为IBaseCacheStrategy接口中的 BeginCacheLock() 方法中的 [resourceName.key]资源名称,和 Lock() 方法中的 resourceName 对应 获取最长锁定时间(锁最长生命周期) 重试次数, 最小锁定时间周期 单位:Milliseconds,毫秒 用于提供给缓存储存的封装对象,包含了对象类型(Type)信息 缓存序列化扩展方法,所有(分布式)缓存的序列化、反序列化过程必须使用这里的方法统一读写 序列化到缓存可用的对象 从缓存对象反序列化到实例 从缓存对象反序列化到实例(效率更高,推荐) 所有以 string 类型为 key ,object 为 value 的缓存策略接口 Senparc.CO2NET 全局设置 全局配置 在 startup.cs 中运行 RegisterServiceExtension.AddSenparcGlobalServices() 即可自动注入 指定是否是Debug状态,如果是,系统会自动输出日志 请求超时设置(以毫秒为单位),默认为10秒。 说明:此处常量专为提供给方法的参数的默认值,不是方法内所有请求的默认超时时间。 JavaScriptSerializer 类接受的 JSON 字符串的最大长度 默认缓存键的第一级命名空间,默认值:DefaultCache 网站根目录绝对路径 缓存类型 本地运行时缓存(单机) Redis缓存(支持分布式) Memcached(支持分布式) 用户信息中的性别(sex) 异常基类 BaseException 构造函数 BaseException 异常消息 内部异常信息 是否已经使用WeixinTrace记录日志,如果没有,BaseException会进行概要记录 缓存异常 缓存异常构造函数 领域缓存未注册异常 UnregisteredDomainCacheStrategyException 构造函数 解决 XXE 漏洞,自动将 XmlResolver 设为 null 构造函数 扩展方法 把数据转换为Json格式(使用Newtonsoft.Json.dll) 数据 是否使用缩进格式 string.IsNullOrWhiteSpace()的扩展方法 string.IsNullOrEmpty()的扩展方法 string.Format()的扩展方法 用于网页的HTML、Url编码/解码 封装System.Web.HttpUtility.HtmlEncode 封装System.Web.HttpUtility.HtmlDecode 封装 System.Web.HttpUtility.UrlEncode 注意:.NET Core 转义后字母为大写 编码,默认为 UTF8 封装System.Web.HttpUtility.UrlDecode 编码,默认为 UTF8 微信日期处理帮助类 Unix起始时间 转换微信DateTime时间到C#时间 微信DateTime 转换微信DateTime时间到C#时间 微信DateTime 转换微信DateTimeOffset时间到C#时间 微信DateTime 转换微信DateTimeOffset时间到C#时间 微信DateTime 获取微信DateTime(UNIX时间戳) 时间 获取Unix时间戳 获取Unix时间戳 实体帮助类 Extension method that turns a dictionary of string and object to an ExpandoObject Snagged from http://theburningmonk.com/2011/05/idictionarystring-object-to-expandoobject-extension-method/ 文件帮助类 根据完整文件路径获取FileStream 从Url下载文件 GPS 帮助类 计算两点GPS坐标的距离(单位:米) 第一点的纬度坐标 第一点的经度坐标 第二点的纬度坐标 第二点的经度坐标 给定的经度1,纬度1;经度2,纬度2. 计算2个经纬度之间的距离。 经度1 纬度1 经度2 纬度2 距离(公里、千米) 将角度换算为弧度。 角度 弧度 获取维度差 千米 获取经度差 千米 百度地图静态图片API,文档:http://api.map.baidu.com/lbsapi/cloud/staticimg.htm 获取百度地图静态图片 中心点经度 中心点维度 返回图片大小会根据此标志调整。取值范围为1或2: 1表示返回的图片大小为size= width * height; 2表示返回图片为(width*2)*(height *2),且zoom加1 注:如果zoom为最大级别,则返回图片为(width*2)*(height*2),zoom不变。 地图级别。高清图范围[3, 18];低清图范围[3,19] 标记列表,如果为null则不输出标记 图片宽度。取值范围:(0, 1024]。 图片高度。取值范围:(0, 1024]。 标记大小 百度地图标记 (可选)有大中小三个值,分别为s、m、l。 (可选)Color = [0x000000, 0xffffff]或使用css定义的颜色表。 black 0x000000 silver 0xC0C0C0 gray 0x808080 white 0xFFFFFF maroon 0x800000 red 0xFF0000 purple 0x800080 fuchsia 0xFF00FF green 0x008000 lime 0x00FF00 olive 0x808000 yellow 0xFFFF00 navy 0x000080 blue 0x0000FF teal 0x008080 aqua 0x00FFFF (可选)指定集合 {A-Z, 0-9} 中的一个大写字母数字字符。不指定时显示A。 自定义icon的地址,图片格式目前仅支持png32的。设置自定义图标标注时,忽略Size、Color、Label三个属性,只设置该属性且该属性前增加-1,如markerStyles=-1, http://api.map.baidu.com/images/marker_red.png,图标大小需小于5k,超过该值会导致加载不上图标的情况发生。 经度longitude(对应GoogleMap的X) 纬度latitude(对应GoogleMap的Y) 谷歌地图帮助类 获取谷歌静态地图Url。API介绍:https://developers.google.com/maps/documentation/staticmaps/?hl=zh-CN 标记大小 谷歌地图标记 (可选)指定集合 {tiny, mid, small} 中的标记大小。如果未设置 size 参数,标记将以其默认(常规)大小显示。 (可选)指定 24 位颜色(例如 color=0xFFFFCC)或集合 {black, brown, green, purple, yellow, blue, gray, orange, red, white} 中预定义的一种颜色。 (可选)指定集合 {A-Z, 0-9} 中的一个大写字母数字字符。 经度longitude 纬度latitude 反射帮助类 创建对象实例 命名空间.类型名 程序集 创建对象实例 要创建对象的类型 类型所在程序集名称 类型所在命名空间 类型名 获取静态类属性 类型所在程序集名称 类型所在命名空间 类型名 属性名称(忽略大小写) 获取静态类属性 类型 属性名称(忽略大小写) Allows JSON serialization of Expando objects into expected results (e.g., "x: 1, y: 2") instead of the default dictionary serialization. JSON输出设置 是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中 需要特殊忽略null值的属性名称 指定类型(Class,非Interface)下的为null属性不生成到Json中 例外属性,即不排除的属性值 枚举类型显示字符串 JSON 输出设置 构造函数 是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中 需要特殊忽略null值的属性名称 指定类型(Class,非Interface)下的为null属性不生成到Json中 是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中 需要特殊忽略null值的属性名称 指定类型(Class,非Interface)下的为null属性不生成到Json中 JSON 输出设置 构造函数 优先级: ignoreNulls < propertiesToIgnoreNull < typesToIgnoreNull 是否忽略当前类型以及具有IJsonIgnoreNull接口,且为Null值的属性。如果为true,符合此条件的属性将不会出现在Json字符串中 需要特殊忽略null值的属性名称 指定类型(Class,非Interface)下的为null属性不生成到Json中 序列化帮助类 将对象转为JSON字符串(进行Json输出配置) 需要生成JSON字符串的数据 JSON输出设置 反序列化到对象 反序列化对象类型 JSON字符串 反序列化到对象 JSON字符串 反序列化类型 将字符串转为Unicode unicode解码 unicode编码字符串 ASCII字典排序 创建新的ASCIISort实例 安全帮助类,提供SHA-1算法等 采用SHA-1算法加密字符串(小写) 需要加密的字符串 HMAC SHA256 加密 加密消息原文。当为小程序SessionKey签名提供服务时,其中message为本次POST请求的数据包(通常为JSON)。特别地,对于GET请求,message等于长度为0的字符串。 秘钥(如小程序的SessionKey) 获取大写的MD5签名结果 需要加密的字符串 编码 获取大写的MD5签名结果 需要加密的字符串 编码 获取小写的MD5签名结果 需要加密的字符串 编码 AES加密(默认为CBC模式) 输入的数据 向量 加密密钥 AES解密(默认为CBC模式) 输入的数据 向量 key AES 加密(无向量,CEB模式,秘钥长度=128) 明文(待加密) 密文 AES 解密(无向量,CEB模式,秘钥长度=128) 被加密的明文(注意:为Base64编码) 密钥 明文 多种缓存测试帮助类 测试多种缓存 遍历使用多种缓存测试同一个过程(委托),确保不同的缓存策略行为一致 消息队列 队列数据集合 同步执行锁 立即同步所有缓存执行锁(给OperateQueue()使用) 生成Key 队列应用名称,如“ContainerBag” 操作对象类型 对象唯一标识Key 操作名称,如“UpdateContainerBag” 操作队列 获取当前等待执行的Key 获取SenparcMessageQueueItem 添加队列成员 移除队列成员 获得当前队列数量 SenparcMessageQueue消息队列项 队列项唯一标识 队列项目命中触发时执行的委托 此实例对象的创建时间 项目说明(主要用于调试) 初始化SenparcMessageQueue消息队列项 Senparc.CO2NET 基础信息注册 修改默认缓存命名空间 RegisterService 自定义命名空间名称 注册 Threads 的方法(如果不注册此线程,则AccessToken、JsTicket等都无法使用SDK自动储存和管理) RegisterService 注册 TraceLog 的方法 RegisterService 开始 Senparc.CO2NET 初始化参数流程 是否自动扫描全局的扩展缓存(会增加系统启动时间) 需要手动注册的扩展缓存策略 (LocalContainerCacheStrategy、RedisContainerCacheStrategy、MemcacheContainerCacheStrategy已经自动注册), 如果设置为 null(注意:不适委托返回 null,是整个委托参数为 null),则自动使用反射扫描所有可能存在的扩展缓存策略 快捷注册接口 快捷注册类,IRegisterService的默认实现 开始 Senparc.CO2NET SDK 初始化参数流程 快捷注册类,RegisterService 扩展类 CO2NET 全局设置 是否出于Debug状态 默认缓存键的第一级命名空间,默认值:DefaultCache Senparc 统一代理标识 Redis连接字符串 Memcached连接字符串 SenparcSetting 构造函数 SenparcSetting 构造函数 从 Web.Config 文件自动生成 SenparcSetting 设置 CO2NET 全局的 Debug 状态 SenparcMessageQueue线程自动处理 析构函数,将未处理的队列处理掉 启动线程轮询 线程处理类 异步线程容器 注册线程 Senparc.CO2NET 日志记录 统一日志锁名称 记录BaseException日志时需要执行的任务 执行所有日志记录操作时执行的任务(发生在记录日志之后) 是否开放每次 APM 录入的记录,默认为关闭(当 Senparc.CO2ENT.APM 启用时有效) Senparc.Weixin全局统一的缓存策略 队列执行逻辑 结束日志记录 系统日志 日志内容 自定义日志 日志类型 日志内容 API请求日志(接收结果) API请求日志(Post发送消息) BaseException 日志 BaseException 日志 每一次跟踪日志的对象信息 获取完整单条日志的字符串信息 浏览器公共类 获取 Headers 中的 User-Agent 字符串 实体工具类 将对象转换到指定类型 向属性填充值 向属性填充值(强制使用指定的类型) 服务器工具类 dll 项目根目录 获取相对于网站根目录的文件路径 获取相对于dll目录的文件绝对路径 虚拟路径,如~/App_Data/ 流工具类 获取Stream的Base64字符串 将base64String反序列化到流,或保存成文件 如果为null则不保存 将memoryStream保存到文件 【异步方法】获取Stream的Base64字符串 【异步方法】将base64String反序列化到流,或保存成文件 如果为null则不保存 【异步方法】将memoryStream保存到文件 XML 工具类 反序列化 XML字符串 反序列化 序列化 说明:此方法序列化复杂类,如果没有声明XmlInclude等特性,可能会引发“使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型。”的错误。 对象 序列化将流转成XML字符串 缓存立即生效方法 是否立即个更新到缓存 是否立即更新到缓存 释放,开始立即更新所有缓存 创建一个FlushCache实例 是否立即更新到缓存 Get 请求处理 获取随机文件名 GET方式请求URL,并返回T类型 接收JSON的数据类型 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 从Url下载 从Url下载,并保存到指定目录 需要下载文件的Url 保存文件的路径,如果下载文件包含文件名,按照文件名储存,否则将分配Ticks随机文件名 超时时间 【异步方法】异步GetJson 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 【异步方法】异步从Url下载 【异步方法】从Url下载,并保存到指定目录 需要下载文件的Url 保存文件的路径,如果下载文件包含文件名,按照文件名储存,否则将分配Ticks随机文件名 超时时间 Post 请求处理 发起Post请求,可上传文件 返回数据类型(Json对应的实体) 请求Url CookieContainer,如果不需要则设为null 证书,如果不需要则保留null 代理请求超时时间(毫秒) 需要Post的文件(Dictionary 的 Key=name,Value=绝对路径) 需要Post的键值对(name,value) 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 发起Post请求,可包含文件流 返回数据类型(Json对应的实体) 请求Url CookieContainer,如果不需要则设为null 文件流 证书,如果不需要则保留null 是否使用Ajax请求 代理请求超时时间(毫秒) 验证服务器证书回调自动验证 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText Form表单Post数据,获取JSON CookieContainer,如果不需要则设为null 表单数据,Key对应name,Value对应value 证书,如果不需要则保留null 是否使用Ajax请求 代理请求超时时间(毫秒) 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 使用Post方法上传数据并下载文件或结果 【异步方法】发起Post请求,可上传文件 返回数据类型(Json对应的实体) 请求Url CookieContainer,如果不需要则设为null 证书,如果不需要则保留null 代理请求超时时间(毫秒) 需要Post的文件(Dictionary 的 Key=name,Value=绝对路径) 需要Post的键值对(name,value) 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 【异步方法】发起Post请求,可包含文件流 返回数据类型(Json对应的实体) 请求Url CookieContainer,如果不需要则设为null 文件流 证书,如果不需要则保留null 是否使用Ajax请求 代理请求超时时间(毫秒) 验证服务器证书回调自动验证 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 【异步方法】Form表单Post数据,获取JSON CookieContainer,如果不需要则设为null 表单数据,Key对应name,Value对应value 证书,如果不需要则保留null 是否使用Ajax请求 代理请求超时时间(毫秒) 返回JSON本文,并在进行序列化之前触发,参数分别为:url、returnText 【异步方法】使用Post方法上传数据并下载文件或结果 HTTP 请求工具类 HTTP 请求工具类 HTTP 请求工具类 设置Web代理 清除Web代理状态 验证服务器证书 设置HTTP头 是否使用Ajax header附加信息 填充表单信息的Stream 填充表单信息的Stream 组装QueryString的方法 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3 .NET 4.5 版本的HttpWebRequest参数设置 使用Get方法获取字符串结果(没有加入Cookie) 使用Get方法获取字符串结果(加入Cookie) 证书,如果不需要则保留null referer参数 是否使用Ajax 获取HttpWebResponse或HttpResponseMessage对象,本方法通常用于测试) 使用Get方法获取字符串结果(没有加入Cookie) 使用Get方法获取字符串结果(加入Cookie) 证书,如果不需要则保留null referer参数 获取 Content 提交表单字段 给.NET Framework使用的HttpPost请求公共设置方法 header附加信息 使用Post方法获取字符串结果,常规提交 使用Post方法获取字符串结果 需要上传的文件,Key:对应要上传的Name,Value:本地文件名 证书,如果不需要则保留null header 附加信息 验证服务器证书回调自动验证 使用Post方法获取HttpWebResponse或HttpResponseMessage对象,本方法独立使用时通常用于测试) 需要上传的文件,Key:对应要上传的Name,Value:本地文件名 证书,如果不需要则保留null header附加信息 验证服务器证书回调自动验证 使用Post方法获取字符串结果,常规提交 使用Post方法获取字符串结果 需要上传的文件,Key:对应要上传的Name,Value:本地文件名 header附加信息 验证服务器证书回调自动验证 使用Post方法获取HttpWebResponse或HttpResponseMessage对象,本方法独立使用时通常用于测试) 需要上传的文件,Key:对应要上传的Name,Value:本地文件名 证书,如果不需要则保留null header附加信息 验证服务器证书回调自动验证 统一封装HttpResonse请求,提供Http请求过程中的调试、跟踪等扩展能力 .NET Core 使用的 WebProxy 类 参考:http://www.abelliu.com/dotnet/dotnet%20core/2017/03/14/dotnetcore-proxy/ WebProxy for .net core 时间扩展类 当前时间 当天零点时间,从 SystemTime.Now.Date 获得