当我尝试将我的 asp.net mvc 应用程序发布到我的本地(pc)iis 并启用“始终加密”时,我遇到了奇怪的问题。
当我尝试在本地 IIS(非快速)上使用 EF6 访问数据库时,我的应用程序保持超时:
但是,如果我尝试使用 Visual Studio 2017 访问和调试我的 asp.net mvc 应用程序,则可以完美访问“始终启用加密”的数据库,而不会超时。
我也可以使用 SQL Management Studio 毫无问题地访问它。
两者(SMSS 和 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] + ";");
}
}
}
}
}
above code show me this error :
现在,有了这种错误,我知道我必须这样做:)
- 将应用程序池的身份更改为之前生成证书的“用户”。
- 导出当前用户证书(始终加密使用)并导入到要用作应用程序池身份的用户。
Now its worked!
EF 应该像 .NET 数据提供程序那样抛出某种类型的错误,而不是真正让我困惑的超时失败@_@
更新(1):现在的问题是如何使用默认的 ApplicationPoolIdentity 而不是自定义帐户来使用它(证书)?
UPDATED (2) :
I have done what jakub https://stackoverflow.com/a/45579321/8426789 suggest, but still no luck.
Thanks