无法访问 Azure Web 应用程序上的 SQLite 数据库
Can't Access SQLite DB on Azure Web App
我创建了一个 ASP.NET MVC 网络应用程序,它使用 EF6 下的 SQLite 数据库。
该应用程序在 VS 中运行良好。该数据库包含在 App_Data 文件夹中的项目中。当我发布到 Azure(或 LAN 上的 IIS 测试服务器)时,出现错误。 Azure 实例显示 HTTP 500 错误,它只发生在需要数据库访问权限才能加载的视图上。除此之外,它工作正常。 IIS 测试服务器显示错误 无法打开数据库文件。 我尝试放松对 IIS 实例上的 .db 文件的文件权限,但没有任何改变。我不确定如何在 Azure 实例上做任何事情。
有人可以帮我调试 Azure/IIS 上的 SQLite 连接问题吗?
详情
- VS 2015 企业版
- Azure 应用服务(免费层,生产服务器)
- SQLite3 数据库
- IIS on Windows Server 2012R2(测试服务器)
我尝试了各种连接字符串组合:
- 将连接字符串设置到 Azure 门户中的
D:/xxx/xxx path
- 修改 VS 部署配置文件中的连接字符串(部署时替换 web.config 中的值)
- 保持不变
没有任何效果,甚至没有更改错误。也许这些配置之一能够访问该文件,但根本无法打开它(我认为这是 IIS 错误所暗示的)。即便如此,我该如何去找出答案?
编辑
在IIS测试服务器上,我发现整个问题是Web.config中的连接字符串错误。我在服务器上手动编辑它并立即启动。我仍然不确定如何更正 Azure 服务器上的路径,也不确定如何更正我在 VS 中的部署设置以注入正确的路径。沿着这些思路的想法仍然受到赞赏。
编辑 2
我还发现,每次我访问需要数据库访问的页面时,我都会在 Azure 上的应用程序日志中看到此错误:
2017-01-03T20:25:32
System.ApplicationException: The trace listener AzureBlobTraceListener is disabled. ---> System.InvalidOperationException: The SAS URL for the cloud storage account is not specified. Use the environment variable 'DIAGNOSTICS_AZUREBLOBCONTAINERSASURL' to define it.
at Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.RefreshConfig()
--- End of inner exception stack trace ---
经过一些非常缓慢的调试会话后,我终于想起我在 Azure 门户中设置了一个连接字符串值。
显然,Azure 门户中设置的任何值都会覆盖(在运行时?)Web.config 文件
中的值
我只是从 Azure 门户中删除了连接字符串(您的 app/Application Settings/Connection 字符串)并且它起作用了。最终的连接字符串如下所示:
<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 美元/月的价格提供服务。明智地选择!
我创建了一个 ASP.NET MVC 网络应用程序,它使用 EF6 下的 SQLite 数据库。
该应用程序在 VS 中运行良好。该数据库包含在 App_Data 文件夹中的项目中。当我发布到 Azure(或 LAN 上的 IIS 测试服务器)时,出现错误。 Azure 实例显示 HTTP 500 错误,它只发生在需要数据库访问权限才能加载的视图上。除此之外,它工作正常。 IIS 测试服务器显示错误 无法打开数据库文件。 我尝试放松对 IIS 实例上的 .db 文件的文件权限,但没有任何改变。我不确定如何在 Azure 实例上做任何事情。
有人可以帮我调试 Azure/IIS 上的 SQLite 连接问题吗?
详情
- VS 2015 企业版
- Azure 应用服务(免费层,生产服务器)
- SQLite3 数据库
- IIS on Windows Server 2012R2(测试服务器)
我尝试了各种连接字符串组合:
- 将连接字符串设置到 Azure 门户中的
D:/xxx/xxx path
- 修改 VS 部署配置文件中的连接字符串(部署时替换 web.config 中的值)
- 保持不变
没有任何效果,甚至没有更改错误。也许这些配置之一能够访问该文件,但根本无法打开它(我认为这是 IIS 错误所暗示的)。即便如此,我该如何去找出答案?
编辑 在IIS测试服务器上,我发现整个问题是Web.config中的连接字符串错误。我在服务器上手动编辑它并立即启动。我仍然不确定如何更正 Azure 服务器上的路径,也不确定如何更正我在 VS 中的部署设置以注入正确的路径。沿着这些思路的想法仍然受到赞赏。
编辑 2
我还发现,每次我访问需要数据库访问的页面时,我都会在 Azure 上的应用程序日志中看到此错误:
2017-01-03T20:25:32 System.ApplicationException: The trace listener AzureBlobTraceListener is disabled. ---> System.InvalidOperationException: The SAS URL for the cloud storage account is not specified. Use the environment variable 'DIAGNOSTICS_AZUREBLOBCONTAINERSASURL' to define it. at Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.RefreshConfig() --- End of inner exception stack trace ---
经过一些非常缓慢的调试会话后,我终于想起我在 Azure 门户中设置了一个连接字符串值。
显然,Azure 门户中设置的任何值都会覆盖(在运行时?)Web.config 文件
中的值我只是从 Azure 门户中删除了连接字符串(您的 app/Application Settings/Connection 字符串)并且它起作用了。最终的连接字符串如下所示:
<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 美元/月的价格提供服务。明智地选择!