Code Copied

部署基于EF 6和MVC 5的Web应用程序

服务器环境

操作系统:Windows Server 2008 R2

数据库:SQL Server 2008 R2, SQL Server 2012 SP1

Web Host:IIS 7

附加数据库

数据库文件准备

将MVC应用程序App_Data目录下的数据库文件复制到Windows Server 2008 R2服务器上。

SNAGHTMLa40994

尝试使用SQL Server 2008 R2

将数据库文件拷贝到服务器时,由于数据库文件版本较高,无法使用SQL Server 2008 R2去附加。

image

版本号为6xx的表示SQL Server 2008系列的数据库文件,版本号为7xx的表示SQL Server 2012系列的数据库文件。

原因:通过Visual Studio 2013开发基于EF 6 Code First的MVC 5应用程序时,生成的SQL Server数据库文件是基于2012的。

如果不清楚自己的数据库版本号,可以用下面的语句查询:

use master
select @@VERSION

尝试使用SQL Server 2012 SP1

最终使用SQL Server 2012 SP1成功附加Visual Studio 2013下的数据库文件

image

IIS部署站点

添加网站

image

设置网站名称、指定物理路径、绑定IP和主机名:

image

设置应用程序池

在IIS应用程序池中选中Web应用的应用程序池,右键→高级设置。

image

设置.NET Framework版本为v4.0,进程模型下的标识设置为NetworkService,然后点击确定。

image

启动网站

浏览网站,可能会出现类如下的错误:

用户 NT AUTHORITY\NETWORK SERVICE 登录失败

这个错误的名称可以归纳为:用户xxx登录失败。

造成这个错误的原因有2个:

  • 在web.config文件的连接串中设定了Integrated Security=True属性
  • 在SQL Server 2012中没有对应的Network Service用户权限(由于应用程序池用的是Network Service,所以这里也应该是Network Service)。

image

解决数据库登录失败的方法

方法1(不推荐):

删除web.config文件中的Integrated Security=True属性。

方法2(推荐):

在SQL Server 2012中添加Network Service用户,添加方法如下:

对象资源管理器 → 安全性 → 新建登录名

image

在常规选项中,输入或者搜索Network Service用户名,选中Windows身份验证。

image

赋予Network Service用户sysadmin角色,然后点击确定。

image

最终成功启动站点

SNAGHTMLd08681