【发布时间】:2015-08-13 02:06:27
【问题描述】:
我想在本地 IIS 8 服务器上运行我的 ASP.NET MVC 应用程序,但我无法访问 SQL Server 2014。IIS 和 SQL Server 都在同一台主机上运行,并且我使用的是 Windows 8。这是到目前为止我做了什么:
在应用程序中,我创建了一个名为 Employee 的模型:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
我想使用 Entity Framework 连接到数据库,所以我创建了另一个名为 EmployeeDbContext 的类:
public class EmployeeDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
}
我只有一个Home 控制器:
public string Index()
{
EmployeeDbContext employeeDbContext = new EmployeeDbContext();
return "Hello world";
}
我正在使用带有 Windows 身份验证的 SQL Server 2014 Express 引擎,我的计算机名称是 ZSÓTÉ。这是来自web.config 的连接字符串:
<add name="EmployeeDbContext"
connectionString="Server=ZSÓTÉ\SQLEXPRESS;Initial Catalog=Test;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
在Global.asax 中我没有设置任何初始化策略,所以默认情况下如果Test 数据库不存在,那么应用程序应该自动创建它。
之后,我在属性窗口中设置为使用 IIS 本地服务器,并为应用程序创建一个虚拟目录。到目前为止一切正常,我可以在 IIS 管理器中看到应用程序,并设置为在 DefaultAppPool 下运行。之后,我为 IIS APPPOOL\DefaultAppPool 对象设置了项目文件夹的所有权限。设置很好,我可以完美地从 IIS 服务器访问应用程序。
最后,我在 SQL Server Management Studio 中为IIS APPPOOL\DefaultAppPool 创建了一个登录名,并设置了这两个角色:public 和dbcreator。但即使在所有这些设置之后,应用程序也无法通过 IIS 正常工作。
虽然我在浏览器上收到“Hello world”消息,但从未创建过 Test 数据库。最奇怪的是,如果我对连接字符串进行恶意更改,我什至没有收到任何编译错误,只是浏览器中的“Hello world”消息。
我做错了什么?提前谢谢!
【问题讨论】:
-
"我为 IIS "APPOOL\DefaultAppPool" 创建了一个登录名。根据您的连接字符串,您正在使用 Integrated Security。您需要查看 windows 用户 您的应用程序池正在运行。那不是 APPOOL\DefaultAppPool,更可能是 LOCAL\System 或类似的东西。那是您需要添加的 windows 用户。更令人担忧的是,您的应用程序没有在任何地方记录连接失败。
-
另外(更简单)您可以使用 SQL 身份验证,这意味着您只需在连接字符串中使用硬编码的用户/密码。
-
它应该在“DeafaultAppPool”虚拟帐户下运行。但为了确定,我在 IIS 上将池标识更改为我的帐户(设置用户 ID,ant 密码),所以当我运行应用程序时,任务管理器向我显示 w3wp 进程正在我的帐户下运行。但它仍然不起作用。我是否错过了一些强制性安装?因为如果我删除提供者名称属性,例如从连接字符串中,我应该收到一个编译错误,但我什么也没得到。
-
在我们遇到错误之前,很难以这种方式进行故障排除。如果您使连接字符串无效,您将收到运行时错误而不是编译错误。但是您甚至没有收到运行时错误。有时使用 EF,它会延迟加载,甚至在您请求数据并将其显示在屏幕上之前,它甚至不会连接。
标签: sql-server asp.net-mvc entity-framework iis