ASP.NET 将 SQLDatareader 转换成 List

模型中的属性的数据类型支持基本类型(int string 等等)并且包括 枚举类型

模型中的属性名必须与reader中的列名一致,否则不一致的属性无法赋值.

下面是调用示例

 

发表在 CS架构后台语言 | 标签为 | 留下评论

SqlServer 2008 备份集中的数据库备份与现有的xxx数据库不同解决方法

问题描述

今天在配置一个 .net 站点时,导入以前的数据库备份文件,提示:sql2008备份集中的数据库备份与现有的xxx数据库不同解决方法。

  • 数据库: Microsoft SQL Server 2008

问题重现

  • 新建一个数据库,名称与要恢复的数据库名称一致

  • 【数据库】上右键,【还原数据库】


  • 选择刚才新建的空数据库做为【目标数据库】,选择好【源设备】的文件路径,确定,错误重现,如下:

正确操作

  • 直接在【数据库】上右键,选择【还原数据库】
  • 在【还原数据库】界面,配置好【源设备】的路径,【目标数据库】里面自动会出现你需要还原的数据库的名称,选择它
  • 刚才添加的备份集,点击确定即可。

Tips

出现问题时百度,发现很多人遇到,有人提供如下方法,亲测有效:

注释:xxxx是你需要还原的数据库名称,xxxx.bak是你需要还原的备份文件。
上面方法执行成功后,只有部分的表结构已经还原,而且表中没有数据,这时就可以用系统默认的方法再用xxxx.bak文件还原一次数据库就大功告成了,必须要选中覆盖还原哦。

发表在 应用工具软件 | 标签为 | 留下评论

重新编译PHP7使其支持PostgreSQL

安装PostgreSQL

编译PHP增加PostgreSQL扩展

1、先看下之前编译的configure命令。

2、配置编译参数。在上面的configure命令后面加上--with-pdo-pgsql选项。

3、开始编译和安装。

4、安装完成后,检查PHP扩展。

输出里有pdo_pgsql,就表示PostgreSQL的扩展ok了。

发表在 操作系统相关 | 标签为 | 留下评论

ssh连接速度很慢的解决方案

问题:ping目标机速度很快,几乎是微秒级,但是ssh连接时却很慢,需要10几秒甚至更多

解决方案:ssh -v  desm(desm表示目标机的ip或者hostname)
查看终端的输出,看到底停在哪个地方:

此时可以修改本机的ssh_config文件(vim /etc/ssh/ssh_config)
找到GSSAPIAuthentication yes并将其改为GSSAPIAuthentication no
然后重启sshd服务,再看问题是否解决
如果依然存在,继续终端查看

如果停在上面所示的地方,那么,将目标机器的sshd_config的UseDNS yes(这是默认方式)修改为UseDNS no,然后重启目标机的sshd服务,再连,应该是很快的。
发表在 操作系统相关 | 标签为 | 留下评论

ajax请求处理中导致页面暂时卡住的问题

事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return。基本的逻辑剥离出来是这样的:

这里的ajax不能用异步的,否则函数返回时,result还未赋值,会出错。所以我加了async:false。看起来好像没什么问题。我调用这个函数可以正常的得到数据。

接下来,要加另外一个功能,由于ajax请求有一定的耗时,所以我需要在发出请求前页面有个loading效果,即显示一张“正在加载”的gif图片,想必大家也都见过。所以我的处理函数就变成了这样:

请求之前显示loading图片,请求完成后把它隐藏。看起来也没什么问题。为了看清效果,我的p.php代码sleep了3秒,如下:

但是我运行的时候问题出现了,我点击按钮并未像预想的那样出现这个loading图片,页面什么反应也没有。排除良久找到了原因,就在async:false这里。

浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使我的DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因。

setTimeout解决阻塞问题

既然明白了问题在哪里,我们就来针对性想办法。为了不让同步ajax请求阻塞线程,我想到了setTimeout,把请求的代码放到sestTimeout中,让浏览器重启一个线程来操作,不就解决问题了吗?于是乎,我的代码就变成了这样:

setTimeout的第二个参数设为0,浏览器会在一个已设的最小时间后执行。不管三七二十一先运行起来看看。

结果loading图片显示出来了,但是!!!图片怎么不动呢,我明明是一张动态gif图。这个时候我很快就想到了,虽然同步请求延迟执行了,但是它执行期间还是会把UI线程给阻塞。这个阻塞相当牛逼,连gif图片都不动了,看起来像一张静态图片一样。

结论很明显,setTimeout治标不治本,相当于把同步请求“稍稍”异步了一下,接下来还是会进入同步的噩梦,阻塞线程。方案失败。

是时候用Deferred了

jQuery在1.5版本之后,引入了Deferred对象,提供的很方便的广义异步机制。详情可参看阮一峰老师的这篇文章

http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html

于是我用Deferred对象改写了代码,如下:

可以看到我在ajax请求中去掉了async:false,也就是说,这个请求又是异步的了。另外请注意success函数中的这一 句:defer.resolve(data),Deferred对象的resolve方法可传入一个参数,任意类型。这个参数可以在done方法中拿到, 所以我们异步请求来的数据就可以以这样的方式来返回了。

至此,问题得到了解决。Deferred对象如此强大且方便,我们可以好好利用它。

我的全部测试代码如下,有意的同学可以拿去测一下:

 

发表在 Web前台开发技术 | 标签为 , , | 留下评论

Centos 6.5升级git版本的办法

安装依赖:

卸载Centos自带的git1.7.1

通过git –version查看系统带的版本,Cento6.5应该自带的是git版本是1.7.1

下载git2.2.1并将git添加到环境变量中

查看版本号

 

发表在 应用工具软件, 操作系统相关 | 标签为 | 留下评论

淘宝npm镜像使用方法

淘宝 npm 地址: http://npm.taobao.org/

如何使用:

1.临时使用

2.永久使用

  • 配置后可通过下面方式来验证是否成功
    npm config get registry

  • npm info express

3.通过cnpm使用

  • 使用
    cnpm install express
发表在 应用工具软件 | 标签为 , | 留下评论

如何申请Let’s Encrypt永久免费SSL证书过程教程

Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let’s Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let’s Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。

在今年黑色星期五的时候,Namecheap各种促销活动中也包括年费0.88美元的SSL证书,当时老左也有购买了2个备用学习和适当的放到一些网站中看看效果(据说英文网站谷歌会很喜欢),当时冷雨同学就建议到时候直接使用Let’s Encrypt免费SSL,毕竟有很多大公司支持的,比一些小公司提供的免费SSL证书靠谱很多。

虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,这篇文章分享申请的方法教程。

第一、安装Let’s Encrypt前的准备工作

根据官方的要求,我们在VPS、服务器上部署Let’s Encrypt免费SSL证书之前,需要系统支持Python2.7以上版本以及支持GIT工具。这个需要根据我们不同的系统版本进行安装和升级,因为有些服务商提供的版本兼容是完善的,尤其是debian环境兼容性比CentOS好一些。

比如CentOS 6 64位环境不支持GIT,我们还可以参考”Linux CentOS 6 64位系统安装Git工具环境教程”和”9步骤升级CentOS5系统Python版本到2.7″进行安装和升级。最为 简单的就是Debian环境不支持,可以运行”apt-get -y install git”直接安装支持,如果是CentOS直接运行”yum -y install git-core”支持。这个具体遇到问题在讨论和搜索解决方案,因为每个环境、商家发行版都可能不同。在这篇文章中,老左采用的是debian 7 环境。

第二、快速获取Let’s Encrypt免费SSL证书

在之前的博文中老左也分享过几篇关于SSL部署的过程,我自己也搞的晕乎晕乎的,获取证书和布局还是比较复杂的,Let’s Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。

PS:在获取某个站点证书文件的时候,我们需要在安装PYTHON2.7以及GIT,更需要将域名解析到当前VPS主机IP中。

然后执行上面的脚本,我们需要根据自己的实际站点情况将域名更换成自己需要部署的。

看到这个界面,直接Agree回车。

然后看到这个界面表示部署成功。目前根据大家的反馈测试,如果域名是用的国内DNS,包括第三那方DNSPOD等,都可能获取不到域名信息。

这里我们可以看到有”The server could not connect to the client to verify the  domain”的错误提示信息,包括也有其他提示错误,”The server experienced an internal error :: Error creating new registration”我们在邮局的时候不要用国内免费邮局。所以,如果我们是海外域名就直接先用域名自带的DNS。

第三、Let’s Encrypt免费SSL证书获取与应用

在完成Let’s Encrypt证书的生成之后,我们会在”/etc/letsencrypt/live/laozuo.org/”域名目录下有4个文件就是生成的密钥证书文件。

cert.pem  – Apache服务器端证书
chain.pem  – Apache根证书和中继证书
fullchain.pem  – Nginx所需要ssl_certificate文件
privkey.pem – 安全证书KEY文件

如果我们使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件,在部署Nginx的时候需要用到。在这篇文章中老左就不详细演示Let’s Encrypt证书证书的安装,后面再重新折腾一篇文章详细的部署证书的安装Nginx和Apache。

比如我们在Nginx环境中,只要将对应的ssl_certificate和ssl_certificate_key路径设置成我们生成的2个文件就可以,最好不要移动和复制文件,因为续期的时候直接续期生成的目录文件就可以,不需要再手工复制。

第四、解决Let’s Encrypt免费SSL证书有效期问题

我们从生成的文件中可以看到,Let’s Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。

这样我们在90天内再去执行一次就可以解决续期问题,这样又可以继续使用90天。如果我们怕忘记的话也可以制作成定时执行任务,比如每个月执行一次。

–force-renewal: 代表强制renew
–pre-hook: 是nginx关闭的命令,因为renew需要关闭nginx
–post-hook: 是nginx开启的命令,搞完证书后,开启nginx

自动续签可以使用crontab来完成,在linux中执行  crontab -e
添加代码:(www/web_logs/letsencry.log 为日志文件,您需要新建这个文件并设置可写)

开启http2

可以更快的加载https,关于http2的资料为:http://www.jianshu.com/p/47d02f10757f

nginx安装的时候需要添加:

然后在nginx的ssl配置将listen 443 ssl ;改为:

这样就开启http2了,http2可以更快的加载。

http2的资料:

http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison/

强制使用https,http访问进行跳转

第五、关于Let’s Encrypt免费SSL证书总结

通过以上几个步骤的学习和应用,我们肯定学会了利用Let’s Encrypt免费生成和获取SSL证书文件,随着Let’s Encrypt的应用普及,SSL以后直接免费不需要购买,因为大部分主流浏览器都支持且有更多的主流商家的支持和赞助,HTTPS以后看来也是趋势。在Let’s Encrypt执行过程在中我们需要解决几个问题。

A – 域名DNS和解析问题。在配置Let’s Encrypt免费SSL证书的时候域名一定要解析到当前VPS服务器,而且DNS必须用到海外域名DNS,如果用国内免费DNS可能会导致获取不到错误。

B – 安装Let’s Encrypt部署之前需要服务器支持PYTHON2.7以及GIT环境,要不无法部署。

C – Let’s Encrypt默认是90天免费,需要手工或者自动续期才可以继续使用。

发表在 操作系统相关 | 标签为 , , , | 留下评论

用PHP实现POP3邮件的收取

本文简要说明了通过POP3协议收取邮件、MIME邮件的解码的原理;针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例。分为邮件收取、MIME解码两个部分。这里我们先向您介绍邮件的收取,解码部分会在以后的文章中为各位详细的介绍,敬请关注。

现在Internet上最大的应用应该是非Email莫属了,我们每天都习惯于每天通过Email进行交流,各大网站也几乎都推出了自己的基于WEB的免费邮件系统。在本文里,笔者将介绍一些Email实现的一些原理。同时我们假设你对于PHP的编程有一定的基础,对于TCP/IP协议也有一定的了解。

POP协议简介

POP的全称是PostOfficeProtoco,即邮局协议,用于电子邮件的接收,现在常用的是第三版,简称为POP3。通过POP协议,客户机登录到服务器上后,可以对自己的邮件进行删除,或是下载到本地,下载后,电子邮件客户软件就可以在本地对邮件进行修改、删除等。另外一种用于接收信件的邮件是IMAP协议,现在发展很快,在本文中,我们暂不讨论。

POP服务器一般使用的是TCP的110号端口,如果你用的是Foxmail的话,在其收邮件的时候,你可以看到其信息提示窗口有这么一些命令:

下面让我们来看一段与POP3服务器对话的实录:

以下对几个常用的POP3命令作一个简单的介绍 :

命令   参数   状态   描述

——————————————

USER   username 认可   此命令与下面的pass命令若成功,将导致状态转换

PASS   password 认可

APOP   Name,Digest认可   Digest是MD5消息摘要

——————————————

STAT   None   处理   请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

UIDL   [Msg#]  处理   返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

LIST   [Msg#]  处理   返回邮件数量和每个邮件的大小

RETR   [Msg#]  处理   返回由参数标识的邮件的全部文本

DELE   [Msg#]  处理   服务器将由参数标识的邮件标记为删除,由quit命令执行

RSET   None   处理   服务器将重置所有标记为删除的邮件,用于撤消DELE命令

TOP   [Msg#]  处理   服务器将返回由参数标识的邮件前n行内容,n必须是正整数

NOOP   None   处理   服务器返回一个肯定的响应,不做任何操作。

——————————————

QUIT   None   更新退出

发表在 BS架构后台语言 | 标签为 , | 留下评论

git只clone仓库中指定子目录和指定文件的实现

我的使用场景:

1、想用一颗repository树来保存相互之间没有关联、没有依赖的运维子项目,而每个子项目代码量都很少,每一个子项创建一个repository太没有必要了;

2、公司的所有内部api也想统一放置到一颗repository树上,几十个api不能都创建一个repository吧(我现在是这么认为的,这个需求也可能不太合理)。

如果非要只clone repository中的几个子目录的话,那就用sparse clone,git从1.7.0开始支持,sparse clone也只是一个变通的方法:先拿到整个repository的object等元数据信息,然后在本地加一个叫.git/info/sparse-checkout的文件(即黑名单、白名单,支持正则,参见下文具体操作命令)来控制pull那些目录和文件(类似.gitignore文件,都是本地的概念),变通的实现《git只clone仓库中指定子目录和文件》,如果非要完美的满足这个需求那就用svn吧。

引用stackoverflow上对sparse clone的描述:

Implementing something like this in Git would be a substantial effort and it would mean that the integrity of the clientside repository could no longer be guaranteed. If you are interested, search for discussions on “sparse clone” and “sparse fetch” on the git mailinglist.

In general, the consensus in the Git community is that if you have several directories that are always checked out independently, then these are really two different projects and should live in two different repositories. You can glue them back together using Git Submodules.

具体做法:

一、svn的实现:svn因为是基于文件的集中控制方式,所有“原生”就支持只checkout指定子目录,并且还能很好的对子目录进行权限控制

➜  svn-test  svn co http://xxx.xxxx.com/ops/内网服务器情况   test
A    test/内网机器硬件配置详细
A    test/内网机器硬件配置详细/192.168.1.147.txt
A    test/最新全公司网络拓扑图.png

二、git的实现:基于sparse clone变通方法

截图:

文章来源:http://blog.csdn.net/xuyaqun/article/details/49275477

发表在 应用工具软件 | 标签为 , | 留下评论