无法访问Azure Web App上的SQLite数据库

时间:2017-01-02 05:14:27

标签: asp.net sqlite azure iis connection-string

我创建了一个ASP.NET MVC Web应用程序,该应用程序在EF6下使用SQLite数据库。

该应用程序在VS中工作正常。该数据库包含在App_Data文件夹中的项目中。当我发布到Azure(或LAN上的IIS测试服务器)时,我收到错误。 Azure实例显示 HTTP 500 错误,它仅发生在需要加载数据库访问权限的视图上。除此之外它工作正常。 IIS测试服务器显示错误,指出无法打开数据库文件。我尝试放松IIS实例上的.db文件的文件权限,但没有任何更改。我不确定如何在Azure实例上做任何事情。

有人可以帮我调试Azure / IIS上的SQLite连接问题吗?

详情

  • VS 2015 Enterprise
  • Azure应用服务(免费套餐,生产服务器)
  • SQLite3数据库
  • Windows Server 2012R2上的IIS(测试服务器)

我尝试了各种连接字符串组合:

  • 将连接字符串设置为Azure门户中的D:/xxx/xxx path
  • 修改VS中部署配置文件中的连接字符串(在部署时替换web.config中的值)
  • 将它们全部保留下来

没有任何效果甚至改变了错误。也许其中一个配置能够访问该文件,但根本无法打开它(这是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()      ---内部异常堆栈跟踪结束---

1 个答案:

答案 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=&quot;data source=D:\home\site\wwwroot\App_Data\yourSQLiteDBFile.db&quot;" 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美元/月。明智地选择!