我们都知道使用Visual Studio 2012开发Web应用程序时,默认使用的是Microsoft SQLServer 2012 LocalDB数据库。这种数据库的好处是轻便,不需要沉重的SQL Server服务,但又拥有SQLServer绝大部分功能,如TSQL、存储过程等,显然要比Access数据库更强大,而且数据库还能平滑不需改动就能种植到SQLServer服务中,可谓是好处多多。
在开发环境中,几乎不需要任何设置就能直接使用。例如在网站的App_Data文件夹中添加SQLServer数据库,就会添加一个.mdf的数据库文件及.ldf的数据库日志文件,而这时并未使用SQLServer服务。此时,我们在VS中,就能像在Access中使用Access数据库一样使用这个数据库,例如创建表、生成数据库脚本等。
但是,在网站开发完成后,部署到Windows Server 2016上时,我们需要安装先安装SQL LocalDB。这个安装程序的我们可以在Visaul Studio 2012的光盘镜像中找到。这个是SQLServer 2012版本的LocalDB。
64位:(driver):\packages\sqllocaldb_amd64\sqllocaldb.msi
32位:(driver):\packages\sqllocaldb_x86\sqllocaldb.msi
当然你也可以下载更新SQLServer 2012版本的LocalDB,地址:
Microsoft? SQL Server? 2012 Service Pack 3 (SP3) Express
当然,在Windows Server 2016上只能安装64位版本的LocalDB。
可是,光这样是没办法正常在网站中使用LocalDB,我们还需要对IIS进行设置。
在IIS中部署LocalDB的两个条件:
1. 需要设置网站采用的应用程序池的进程模型的加载用户配置文件为True,并且还要设置配置文件环境为True。
但是在高级设置的对话框中找不到第二个参数的设置条目。
但是可以用记事本直接打开%windir%\system32\inetsvr\config\applicationhost.config文件中直接修改
如:
<configuration>
<system.applicationHost>
<applicationPools>
<add name="DefaultAppPool" />
<add name="Classic .NET AppPool" managedPipelineMode="Classic" />
<add name="ASP.NET v4.0" managedRuntimeVersion="v4.0" />
<add name="ASP.NET v4.0 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
<add name="xxxApp" managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>
<applicationPoolDefaults>
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" />
</applicationPoolDefaults>
</applicationPools>
</system.applicationHost>
</configuration>
本例中应用程序池名称为xxxApp。
2. 设置数据库文件所在文件夹的安全属性,对文件夹授权
本例中的文件夹为App_Data,对文件夹添加IIS用户的授权,这个用户名为IIS AppPool\<应用程序池名称>,在本例中为:
IIS AppPool\xxxApp。
授予除完全控制、特殊权限外的所有允许权限。