我创建了一个ASP.NET MVC Web应用程序,该应用程序在EF6下使用SQLite数据库。
该应用程序在VS中工作正常。该数据库包含在App_Data文件夹中的项目中。当我发布到Azure(或LAN上的IIS测试服务器)时,我收到错误。 Azure实例显示 HTTP 500 错误,它仅发生在需要加载数据库访问权限的视图上。除此之外它工作正常。 IIS测试服务器显示错误,指出无法打开数据库文件。我尝试放松IIS实例上的.db文件的文件权限,但没有任何更改。我不确定如何在Azure实例上做任何事情。
有人可以帮我调试Azure / IIS上的SQLite连接问题吗?
详情
我尝试了各种连接字符串组合:
D:/xxx/xxx path
没有任何效果甚至改变了错误。也许其中一个配置能够访问该文件,但根本无法打开它(这是IIS错误建议的那种,我认为)。即便如此,我该如何找到?
修改 在IIS测试服务器上,我发现整个问题是Web.config中的连接字符串是错误的。我在服务器上手动编辑它,然后它就开始了。我仍然不确定如何更正Azure服务器上的路径,也不知道如何更正VS中的部署设置以注入正确的路径。仍然赞赏这些思路。
编辑2
我还发现每次点击需要访问数据库的页面时,我都会在Azure上的应用程序日志中看到此错误:
2017-01-03T20:25:32 System.ApplicationException:禁用跟踪侦听器AzureBlobTraceListener。 ---> System.InvalidOperationException:未指定云存储帐户的SAS URL。使用环境变量'DIAGNOSTICS_AZUREBLOBCONTAINERSASURL'来定义它。 在Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.RefreshConfig() ---内部异常堆栈跟踪结束---
答案 0 :(得分:2)
在一些非常缓慢的调试会话之后,我终于记起在玩弄时我已经在Azure门户中设置了连接字符串值。
显然,Azure门户中的任何值都会覆盖(在运行时?)Web.config文件中的值
我只是从Azure门户(您的应用程序/应用程序设置/连接字符串)中删除了连接字符串,并且它工作正常。最终的连接字符串如下所示:
<add name="yourThingEntities" connectionString="metadata=res://*/cadb_SQLite.csdl|res://*/cadb_SQLite.ssdl|res://*/cadb_SQLite.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=D:\home\site\wwwroot\App_Data\yourSQLiteDBFile.db"" providerName="System.Data.EntityClient" />
要使Web部署在VS中运行,您需要编辑发布配置文件以使连接字符串与格式匹配
data source=D:\home\site\wwwroot\App_Data\yourSQLiteDBFile.db
显然没有多少人将SQLite用于网络应用,大多数人不应该这样做。如果你一次期望你的网站有多个用户,你就不应该修复SQLite,你应该转换为SQL Server CE,或者只是完整的SQL Server,Azure将为你带来微不足道的5美元/月。明智地选择!