当我尝试将我的 asp.net mvc 应用程序发布到启用“始终加密”的本地 (pc) iis 时,我遇到了奇怪的问题。
当我尝试在本地 IIS(不是 express)上使用 EF6 访问数据库时,我的应用程序保持超时:
但是,如果我尝试使用 Visual Studio 2017 访问和调试我的 asp.net mvc 应用程序,则可以完美访问“始终启用加密”的数据库而不会超时。
而且我也可以毫无问题地使用 SQL Management Studio 访问它。
两者(短信和 ASP.NET Web 配置)都使用此配置。
Column Encryption Setting=enabled;
注意:我使用的是 ASP.NET MVC 5 和 EF 6,SQL Server 2016 开发人员版。
对不起,我的英语不好。
更新: 我尝试使用 .NET Framework 数据提供程序来查看是否有任何线索可以帮助我解决此问题,使用以下代码:
var context = new TestDevEntities();
StringBuilder sb = new StringBuilder();
string connectionString = context.Database.Connection.ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand(@"SELECT [id],[name],[CCno] FROM [TestDev].[dbo].[testEncCol]", connection, null, SqlCommandColumnEncryptionSetting.ResultSetOnly))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
sb.Append(reader[2] + ";");
}
}
}
}
}
上面的代码告诉我这个错误:
现在,有了这种错误,我知道我必须这样做:)
- 将应用程序池的身份更改为之前生成证书的“用户”。
- 导出 currentuser 证书(由始终加密使用)并导入到您要用作应用程序池身份的用户。
现在它起作用了!
EF 应该抛出某种像 .NET 数据提供者一样清晰的错误,而不是让我感到困惑的超时失败@_@
更新(1): 现在的问题是如何使用它(证书)与默认的 ApplicationPoolIdentity 而不是自定义帐户?
更新(2): 我已经完成了jakub 的建议,但仍然没有运气。
谢谢