Sql server SQL Server 2016在发布的IIS上始终加密超时

Sql server SQL Server 2016在发布的IIS上始终加密超时,sql-server,asp.net-mvc,iis,timeout,always-encrypted,Sql Server,Asp.net Mvc,Iis,Timeout,Always Encrypted,当我试图在启用“始终加密”的情况下将asp.net mvc应用程序发布到本地pc iis时,我遇到了一个奇怪的问题 当我试图在本地IIS not express上使用EF6访问数据库时,我的应用程序保持超时: 但如果我尝试使用Visual Studio 2017访问和调试我的asp.net mvc应用程序,则可以在不超时的情况下完全访问启用“始终加密”的数据库 我还可以使用SQL Management Studio毫无问题地访问它 SMSS和ASP.NET web配置都使用此配置 Column

当我试图在启用“始终加密”的情况下将asp.net mvc应用程序发布到本地pc iis时,我遇到了一个奇怪的问题

当我试图在本地IIS not express上使用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=新的testdeventies; StringBuilder sb=新的StringBuilder; 字符串connectionString=context.Database.Connection.connectionString; 使用SqlConnection=newsqlconnectionconnectionstring { 连接。打开; 使用SqlCommand cmd=newSqlCommand@SELECT[TestDev].[dbo].[testEncCol]中的[id]、[name]、[CCno],连接,null,SqlCommandColumnEncryptionSetting.ResultSetOnly { 使用SqlDataReader=cmd.ExecuteReader { 如果reader.HasRows { 边读边读 { 某人[2]+;; } } } }
} 使用DefaultAppPool标识而不是自定义用户帐户的唯一方法是将证书存储在本地计算机证书存储中,而不是当前用户

在本地计算机证书存储中创建证书后,您需要授予对证书的DefaultAppPool访问权限。您可以使用Microsoft管理控制台和本地计算机证书插件执行此操作:

右键单击证书,选择所有任务>管理私钥。 单击添加。 将位置设置为计算机而不是域。 输入IIS AppPool\DefaultAppPool作为对象名称。 单击“确定”两次。
g_lp方法到底做了什么?您是否尝试过分析查询以查看在本地运行时应用程序到底向Sql Server发送了什么?我使用g_lp.ToList将所有数据拉入列表,并使用asp.net mvc视图简单地显示它们。另外,我已经完成了对数据库的分析。结果正常,分析器显示SQL:BatchStarting-SQL:BatchCompleted和query只需简单地选择带有加密列的表。由于记录数只有2行,我很好奇,问题出在EF/C库中。@TheRegister,您在这方面运气好吗?我也遇到过同样的问题,但即使强制应用程序池使用原始证书所有者帐户也不起作用。我已经导入了证书,甚至授予了defaultapppool、IUSER和组的权限,但它仍然看不到证书我已经按照你的建议做了我在上面的解释,仍然没有运气,有什么建议我应该做吗?