Author: blchen

  • 为Azure SQL Database创建数据库账户

    用Azure SQL Database的时候,很多人都会直接用默认的管理员账号来连接数据库,这是一个不好的实践,会有潜在的安全问题。由于SQL Management Studio对Azure SQL Database支持不完美,在第一次给数据库添加新用户这步必定会浪费无数时间,本文希望能帮你节省到这部分宝贵的时间。 首先,用SQL Management Studio连接到数据库,如果报IP拒绝访问的错误,到管理门户上把当前IP加入白名单即可。连上Azure上的SQL Server后,按照下面步骤就可以添加新用户了。下面例子会创建数据库账户mydbuser,并让其成为dbo角色。 先进入master数据库,运行下面命令创建一个login CREATE LOGIN mydbuser WITH password = ‘xxxxx’ 然后切换到要添加用户的数据库,运行下面命令,创建一个user CREATE USER mydbuser FOR LOGIN mydbuser WITH DEFAULT_SCHEMA = dbo 用下面命令给user分配一个role EXEC sp_addrolemember ‘db_owner’, ‘mydbuser’ 现在这个user就有数据库的dbo权限了。

  • 让bootstrap-datepicker控件支持中文

    这边博文记录配置让bootstrap-datepicker支持中文的配置步骤,首先官方的bootstrap-datepicker控件不支持本地化,所以需要从GitHub上下载下面这个第三方的已经支持本地化的,https://github.com/eternicode/bootstrap-datepicker,只需要下载2个文件bootstrap-datepicker.js和bootstrap-datepicker.zh-CN.js即可。这里要注意bootstrap-datepicker.zh-CN.js需要放在locales目录下。

  • 让ASP.NET Web API默认返回JSON格式

    最近重构一些项目里的代码,有一项就是把之前写在MVC的controller里的api方法挪到Web Api controller里,发现ASP.NET Web API的controller默认的返回数据格式是XML格式,搜了一下,要改成返回JSON格式只需要在WebApiConfig.cs文件里的Register方法末尾加上下面几行代码即可 var json = config.Formatters.JsonFormatter;json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;config.Formatters.Remove(config.Formatters.XmlFormatter);

  • ASP.NET MVC网站集成支付宝

    阿里官方的支付宝实时到账的代码示例里DotNet平台(C#语言)只有ASP.NET(WebForm)版本的,没有ASP.NET MVC版本的。于是就撸了这个ASP.NET MVC的版本丢GitHub上了,地址是https://github.com/blrchen/AlipayIntegrationMVC,欢迎有爱的童鞋fork。 一些注意事项 调试前请先在保证AlipayConfig.cs和PaymentController.cs的SubmitAlipay方法里的配置参数均已经更新成正确的参数。 调试需要用服务器调试,不要用localhost调试,要用申请账号的域名调试。 关于return_url和notify_url的说明: return_url是支付完毕后,从支付宝跳转回来的页面,可以理解为是一个同步的接口,只返回一次,商家支付完毕后的业务逻辑主要在这个页面实现。这个页面可以通过http get方法直接取得交易结果的相关详细信息,比如商户订单号,支付宝交易号,交易状态等等。 notifiy_url是个异步通知的接口页面,支付宝会在48小时内将支付结果主动post到这个页面,如果失败则会多次尝试,直到成功为止。这个接口的主要作用是减少了订单支付信息不完整(比如用户支付完毕但是没能成功的返回商家网站)情况的出现,从而避免了因为没有支付信息需要人工完成的订单对账工作。 不要假设return_url会先于notify_url发生,支付宝不保证这2个的先后顺序,所以在return_url的时候也要判断交易是否已经处理过。

  • 在不同Azure存储账号之前迁移虚拟机的vhd文件

    对于Azure云的管理人员来说,把Azure虚拟机的vhd从一个存储账号迁移到另外一个存储账号是很常见的任务.。 在讨论如何把虚拟机的vhd从一个存储账号迁移到另外一个存储账号之前,我们先来回顾一下Azure虚拟机的一些基本概念。首先,对于Azure IaaS的虚拟机在设计上是把计算和存储是分离开的。在创建虚拟机的时候,所有持久vhd(系统盘,数据盘vhd文件)都是创建在Azure存储里,而不是直接在创建在HyperV的物理节点上,虚拟机启动的时候,会直接从存储账号里的vhd文件启动引导操作系统。位于存储的VHD本质上是一个blob文件,所以直接拥有存储的重要特性比如多副本,高可用等。其次,创建VM的时候,azure只允许把vhd创建在和虚拟机在同一个区域的存储里,这主要是为了保证到计算节点和存储之间的网络延迟尽可能小,从而保证虚拟机的IO性能。 在有了这些概念后,我们来看看实现把虚拟机的vhd文件从一个存储迁移到另外一个存储的一些技术流程。

  • git无法自动忽略suo文件的解决方法

    最近发现一个巨烦人的问题,项目里明明已经通过gitignore忽略了.suo文件,但是每次git pull的时候总是还得到.suo文件冲突的提示,也就是说gitignore里忽略suo文件的规则无效,导致了每个提交都会把.suo文件包含进去。项目里的gitignore文件是从GitHub官方的gitignore库拿过来的,理论上应该经过无数人检验了。 上SO一搜,http://stackoverflow.com/questions/11628418/git-cant-ignore-suo-file,原因立现。原来这个.suo文件是在.gitignore之前被提交进服务器的,.gitignore对已经存在服务器里的文件是不起作用的。按照回答里投票最高的答案做了一下,问题解决 git rm –cached project1.v12.suo git commit -m “Delete suo file from repository”

  • SQL语句从邮箱地址里取出域名

    用SQL语句从邮箱地址这一列里把域名取出,也就是要把所有@后面的字符串全部取出返回 SUBSTRING(OrgId,(CHARINDEX(‘@’,OrgId)+1),LEN(OrgId) – (CHARINDEX(‘@’,OrgId))) AS DomainName

  • 用命令行脚本发布Azure网站

    用Visual Studio开发Azure网站,最省心的一点就是部署,只要在VS里项目工程里右键找到Publish一点,代码就会被打包直接部署到Azure上,可谓非常方便。其实,用命令行脚本来实现自动部署也是一样容易的,这边文章主要介绍如果在命令实现自动部署Azure网站的自动化脚本。

  • [C#]Convert.ChangeType Invalid cast from ‘System.String’ to ‘System.Guid’解决方法

    好像是第三次在写代码的时候遇到这个坑了,在利用反射调用Convert.ChangeType进行类型推算自动转换的时候,总是无法完成string到guid的转换,并且报错 An exception of type ‘System.InvalidCastException’ occurred in mscorlib.dll but was not handled in user code Additional information: Invalid cast from ‘System.String’ to ‘System.Guid’. 解决方法便是对Guid的类型对一个单独的处理,通过Guid.Parse,对于其他类型,继续使用Convert.ChangeType

  • NLog把log同时写入控制台和文件

    之前的这篇博文介绍了如何快速在DotNet项目里启用NLog,现在介绍一下如何配置NLog同时把log写入到多个目标,比如在屏幕数据的同时,也写入到日志文件,或者写入进数据库等等。