2017-01-02 3 views
1

Я создал веб-приложение ASP.NET MVC, которое использует базу данных SQLite под EF6.Не удается получить доступ к SQLite DB на Azure Web App

Приложение прекрасно работает в VS. База данных включена в проект в папке App_Data. Когда я публикую на Azure (или тестовый сервер IIS в локальной сети), я получаю сообщение об ошибке. В экземпляре Azure отображается ошибка HTTP 500, и это происходит только в представлениях, требующих доступа к базе данных для загрузки. Кроме этого он работает нормально. На тестовом сервере IIS отображается сообщение об ошибке , неспособное открыть файл базы данных. Я попытался разблокировать разрешения на файл .db на экземпляре IIS, но ничего не изменилось. Я не уверен, как делать что-либо на примере Azure.

Может кто-нибудь помочь мне с отладкой проблемы соединения SQLite на Azure/IIS?

Подробности

  • VS 2015 Enterprise
  • Azure услуг приложений (свободный уровень, производство сервера) базы данных
  • SQLite3
  • IIS на Windows Server 2012R2 (тестовый сервер)

Я пробовал всевозможные комбинации строк подключения:

  • настройка строки подключения к D:/xxx/xxx path в Azure Portal
  • изменение строки подключения в профиле развертывания в VS (заменяет значение в web.config при развертывании)
  • просто оставить его все равно

Ничего не работало или даже не изменило эту ошибку. Возможно, одна из этих конфигураций может получить доступ к файлу, но просто не может его открыть (что, по-моему, является тем, что предлагает ошибка IIS). Даже тогда, как мне узнать?

EDIT На тестовом сервере IIS, я обнаружил, что вся проблема в том, что строка соединения в Web.config было неправильно. Я вручную отредактировал его на сервере, и он выстрелил прямо вверх. Я все еще не уверен, как исправить путь на сервере Azure и как исправить мои настройки развертывания в VS, чтобы ввести правильный путь. Мысли по этим направлениям по-прежнему ценятся.

EDIT 2

Я также обнаружил, что каждый раз, когда я попал на страницу, требующий доступа к БД, я вижу, эта ошибка появляется в журнале приложений на Azure:

2017-01 -03T20: 25: 32 System.ApplicationException: прослушиватель трассировки AzureBlobTraceListener отключен. ---> System.InvalidOperationException: адрес SAS для учетной записи облачного хранилища не указан. Используйте переменную окружения 'DIAGNOSTICS_AZUREBLOBCONTAINERSASURL' для ее определения. в Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.RefreshConfig() --- Конец внутренней трассировки стека исключений ---

+0

[Стрелять назад] (http://www.sqlite.org/whentouse.html). В любом случае, узнайте, какой пользователь IIS работает, и какие разрешения для файлов * и * всех каталогов; и попытайтесь открыть файл и создать новый файл, а также журналы. –

+0

@CL. Я попытался отключить наследование в файле .db, а затем предоставил разрешение IIS_IUSRS для чтения/записи файла. Я также пробовал различные конфигурации в папке. Я даже пытался дать «всем» полный доступ, но это не сработало. Даже если бы я работал над IIS, я не знаю, как исправить проблему на Azure. Есть какие-то мысли? – trademark

+0

Вы должны выяснить, какова фактическая ошибка. См. Последнюю часть моего предыдущего комментария. –

ответ

1

После некоторых плачевно медленных сеансов отладки, я, наконец, вспомнил, что в поигрывая вокруг я установил значение строки подключения в Azure портала.

Видимо любое значение устанавливается в Azure Portal переопределяет (во время выполнения?) Значения в файле Web.config

Я просто удалил строку соединения с Azure Portal (ваши настройки приложения/приложений/Строки подключения), и это сработало. Заключительная строка подключения выглядит следующим образом:

<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 Deploy работает в VS, вам необходимо отредактировать опубликовать профиль, чтобы иметь строку соединения соответствие формату

data source=D:\home\site\wwwroot\App_Data\yourSQLiteDBFile.db 

По-видимому, не многие используют SQLite для веб-приложений, и большинство людей не должно этого делать. Если вы когда-либо ожидаете больше одного пользователя для своего сайта за раз, вы не должны исправлять SQLite, вы должны преобразовать его в SQL Server CE или просто полномасштабный SQL Server, на который Azure позаботится о ничтожных 5 долл./Мес. Выбирай с умом!

+1

Здесь я использую SQLite для веб-приложения, и вы по-прежнему считаете себя обязательным для отказа от использования «не использовать». SQLite отлично подходит для большинства легких приложений в режиме wal. – infocyde

+1

+1 Для обозначения режима WAL. Это стало важным открытием позже, когда SQLite не смог справиться с потребностями параллелизма в приложении. Наконец, мы все равно переключились на SQL Server, но мы пробовали WAL, и производительность была почти на 50% лучше, если я помню коррелят – trademark

+0

Я слышал, что вариант Berkeley DB SQLite позволяет совместить параллелизм еще лучше, но я все еще запутался, если он поддерживает T- SQL или является вариантом NOSQL. Мне нравится сервер MS SQL и все время использую его в бизнесе, но для небольших проектов, имеющих в proc файл, основанный довольно мощный DB, действительно обращается ко мне. Встраиваемый Firebird выглядит хорошо, а также поддерживает хранимые процедуры и т. Д., Но не похоже, что многие используют его. Я думаю, что SQL Server CE был немного слишком хорош, поэтому MS потянула за него разработку. В любом случае SQLite в режиме WAL работает хорошо для того, что мне нужно и прост в использовании. – infocyde

Смежные вопросы