分类目录归档:Net

Net技术总结

网站静态资源迁移到阿里OSS的方法,不需要更改网站源代码

随着网站的运行,网站里的静态资源越来越多,网站不仅包含自身的脚本,样式,配图等静态资源,还包括网站内容的需要上传的图片。图片一多,就需要考虑将图片单独分离出去来减轻服务器的IO读写。自建图片服务器虽然没有技术难度,但是考虑到时间,冗余,备份,性能等成本,最后放弃了自建图片服务器,选择使用阿里的OSS+CDN来做网站的静态资源存储。具体方法如下: 1,首先需要准备一个域名或者已有域名的二级域名来引用站点里的静态资源,单独域名做静态资源的引用的好处网上很多,可以根据需要来处理。 2,根据需要购买阿里的OSS和CDN服务,【阿里的OSS和CDN对域名只需要备案,并不要求必须接入阿里云,简化了许多流程】 3,在oss控制台创建Bucket,用来存储自己的静态资源。由于是通过CDN进行访问,不单独进行访问所以读写权限设置成了私有。在CDN里开启私有Bucket回源即可。 4,将服务器上现有的静态资源同步到阿里OSS创建的Bucket里。阿里针对OSS提供了很多可用的工具,根据需要进行选择即可。【阿里OSS工具汇总页面:https://help.aliyun.com/document_detail/44075.html?spm=5176.doc32204.6.1025.IMy0ZG】最后选择了ossutil这个命令行工具进行数据同步,之所以选择这个工具一是没有依赖,二是本身静态资源也就几百G,没必要使用ossimport2这类的工具进行同步。下载工具后,记得将ossutil的路径添加到Windows的系统环境变量里,方便使用。 在CMD里执行同步命令: x: 切换盘符。 cd x:\files 进入到files文件夹 ossutil64.exe config -e EndPoint -i AccessKeyID -k AccessKeySecret 配置工具替换成自己的id和key ossutil64.exe cp uploads/ oss://bucket/uploads/ -r -f -u –snapshot-path=log/ 将uploads文件夹下的内容全部上传到bucket里的uploads文件夹下【oss其实没有文件夹概念的】. 更多ossutil用法可以使用ossutil64.exe help cp进行查看。 5,就是将上传的图片自动同步到阿里的oss里面。为了不修改网站代码,只能从服务器上保存图片的文件夹入手。对服务器上保存图片的文件夹进行监控,有文件创建就提交到oss上。需要用到一个小工具inotifywait 地址:https://github.com/thekid/inotify-win,需要写一个命令行程序通过管道接收inotifywait的文件地址。 syncfileOSS.exe主要代码 namespace syncfileOSS { class Program … 继续阅读

发表在 Net | 评论关闭

Windows Server2008 R2服务器IIS7站点突然爆出此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方法

有一台Windows Server 2008 R2服务器由于内存问题导致服务器蓝屏并不断重启,之后引起了一系列问题,特别是爆出了此实现不是Windows平台FIPS验证加密算法的一部分,前所未闻的问题犹如泰山压顶,迅速通过度娘,Google查找问题根源。查了数十个小时,可以分为两种,一种是组策略,一种是修改注册表。 1,开始,运行,输入 gpedit.msc打开组策略,左侧列表中找到 计算机配置 – Windows设置 – 安全设置 – 本地策略 – 安全选项,并在右侧找到“系统加密:将FIPS兼容算法用于加密、哈希和签名” 双击上述策略,在弹出的选项中,将状态改为已禁用。【系统本身已是禁用状态】 2更改注册表,开始,运行,输入regedit打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy,将Enabled的值改为0  【值本身就为0】2   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Control\Lsa\FipsAlgorithmPolicy,将Enabled的值改为0  【值本身就为0】 当然还有一种是说在web.config文件里增加一行<runtime><enforceFIPSPolicy enabled=”false” /> </runtime>试了试还是不行。 搜便所有互联网,基本上都是上面的解决访问,时间一分一秒的过去了,还是一筹莫展,不能这样就重做系统吧!那么多站点部署也不是那么容易的。既然是程序报错,修改程序总可以吧! 1 System.InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic … 继续阅读

发表在 Net, 服务器 | 标签为 , | 评论关闭

IIS7静态资源站点部署方案_加快呈现速度的方法

在IIS7下,有时我们需要对网站引用的静态资源如小图,css,js等单独配置一个站点,供其它站点使用。掌握一些部署技巧,将会加快加载速度。 配置静态资源站的时候,应用程序池的最好选择无托管代码,集成模式。应用程序池的设置如下图: 还需要在站点根目录下放置一个web.config,移除多余的模块即可。 <?xml version=”1.0″ encoding=”utf-8″?> <!– For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=152368 –> <configuration> <system.webServer> <modules> <remove name=”OutputCache”/> <remove name=”Session”/> <remove name=”WindowsAuthentication”/> <remove name=”FormsAuthentication”/> <remove name=”PassportAuthentication”/> <remove name=”RoleManager”/> <remove name=”UrlAuthorization”/> <remove name=”FileAuthorization”/> … 继续阅读

发表在 Net, 服务器 | 评论关闭

高效的上一页下一页分页实现思路

在进行开发的时候,最常用的功能是分页,分页的实现很简单,方法也很多,有使用存储过程实现的,也有人使用row_number函数通过sql语句直接实现分页的,这些方法开发起来简单又高效。可是随着数据量一天天增大,慢慢就可以感觉到加载越来越缓慢。罪魁祸首是由于所有分页原理都使用了select count(*)聚合函数获取总记录数,用来计算总页数。对于需要显示页码的分页形式,目前没有想到很好的实现思路。不过对于只有上一页和下一页这种的分页形式,目前发现了一个更好的实现思路,具体实现如下: 创建测试用的表,并填充数据: CREATE TABLE sysUser ( id INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50), age INT ) DECLARE @i INT SET @i=0 WHILE @i<1000 BEGIN SET @i=@i+1 INSERT INTO dbo.sysUser ( name, age ) VALUES ( N’User’+LTRIM(STR(@i)), — name – … 继续阅读

发表在 Net | 评论关闭

大数据下的分页count引起的性能瓶颈及解决思路

在大部分系统里,数据呈现的时候都或多或少需要对数据进行分页处理之后再呈现,在数据量没有达到一定级别之前。无论如何实现分页都不会出现问题,而且分页实现的思路多种多样【sqlserver系统里使用ROW_NUMBER可以很方便的实现分页】,一旦数据量达到一定的级别之后,就会明显感觉到分页在呈现数据的时候有明显的延迟,产生性能瓶颈的根本原因是获取总记录数使用了聚合函数count,而又没有其它可以替代的方式。只能根据业务的进行简单的调整,使其能满足业务的需要。并没有打算实现一个完整的分页例子,也并不打算实现一个分页存储过程,只是将如何调整一个分页缓慢系统的思路整理了一下,大部分思路都是来自网路。 第一种: 这种方法最简单,也是最不灵活的一种,如果只是想要得到一张大表的总记录数,该方法是比较快速的。假如要获取某些条件的总记录数,该方法就不可行了。例子如下: SELECT rows FROM sysindexes WHERE id=OBJECT_ID(‘要查询的表名’) AND indid=1 第二种: 这种方法比较简单,并且也比较灵活。就是对获得的总记录数进行缓存。既然要缓存总记录数,一般都是key-value,value就是总记录数,以什么作为key,可以是传递过来的url,根据参数的不同进行缓存,使用该方法要将page参数过滤掉,也可以是根据获取总记录数的sql语句,对sqlcount字符串进行md5加密作为key【这种方法有个弊端,就是假如sql语句写的不够规范,随意的大小写或者相同几个where条件任意变换位置,获得的md5字符串将不一样】,可以将数据保存到应用程序内存中,也可以保存到文件中,还可以保存到数据库中,设置一个简单的过期策略。使用md5作为key的话,还可以将sql语句一并保存,这样还可以定时或者服务器空闲时更新相应语句的总记录数。 第三种: 对于只有上一页和下一页的分页思路,这种分页其实是不需要获得总记录数的。例如每页要显示20条记录,每次获取的时候只需获取21条,显示还是显示20条,判断一下获取的记录数只要大于20,就显示下一页即可。这种分页方式是最高效的。 第四种: 利用Set Rowcount函数快速滚动到我们要行数,并将id记下,进行分页。 DECLARE @page INT DECLARE @pagesize INT DECLARE @startindex INT DECLARE @id int SET @page=1 SET @pagesize=48 SET @startindex=(@page-1)*@pagesize+1 SET ROWCOUNT @startindex SELECT … 继续阅读

发表在 Net, 杂文 | 评论关闭