ConnectionString не читается из web.config строго типизированным набором данных? SQLiteException (0x80004005): невозможно открыть базу данных - PullRequest
1 голос
/ 01 февраля 2010

Пожалуйста, помогите, как отладить это!
На моей машине разработки я могу успешно разместить локальную службу WCF, которая использует базу данных SQLIte для своего хранилища.
Я просто скопировал DLL-файл wcf-сервиса, файл базы данных и файл System.Data.SqLite.dll на сервер win 2008. На сервере размещена служба WCF в IIS7.Это работало без сбоев, прежде чем я попытался перейти на хранилище на основе базы данных, поэтому часть WCF.IIS7 не является проблемой.
Пока я грубо проверяю, работает ли служба, просматривая файл .svc службы в Internet Explorer, меня приветствует сообщение SQLiteException (0x80004005): unable to open database.

Причина этого заключается в том, что местоположение файла базы данных выглядит жестко запрограммированным: когда я помещаю файл в то же местоположение на сервере, что и на компьютере разработчика, служба запускается без ошибок.
Дело в том, что я использовал мастер Add DataSource для генерации кода для доступа к базе данных и указал, что я хочу, чтобы строка подключения была сохранена в качестве параметра, чтобы позже можно было поместить файл базы данных в другой каталог. Я отредактировал файл web.config, чтобы указать новое местоположение файла базы данных на сервере, но, похоже, этот параметр не читается. Другие настройки в нем, относящиеся к службе WCF, прочитаны правильно.

Где я ошибся? Web.config следует ниже.

<configuration>
  <system.web>
      <customErrors mode="Off"/>
  </system.web>
  <connectionStrings>
     <add name="PrivateMessenger.Properties.Settings.PMDbConnectionString"
          connectionString="data source=G:\PrivateMessengerServers\PMdevelopment\Data\PMDb.s3db"
          providerName="System.Data.SQLite" />
     </connectionStrings>
  <appSettings>
      <add key="PersistenceDirectory" value="G:\PrivatemessengerServers\PMdevelopment\Data" />
  </appSettings>
  <system.serviceModel>
      ...WCF stuff, is read correctly
  </system.serviceModel>
</configuration>

1 Ответ

1 голос
/ 01 февраля 2010

На самом деле веб-сервис читает строку подключения из файла web.config. Оказалось, что я скопировал неправильный элемент xml из файла app.config на компьютере разработчика. После того как я изменил xml на:

<connectionStrings> 
     <add name="MyDataSetLib.Properties.Settings.PMDbConnectionString" 
          connectionString="data source=G:\Data\PMDb.s3db" 
          providerName="System.Data.SQLite" /> 
     </connectionStrings> 

Я был в порядке. Таким образом, если строка подключения, кажется, не читается из web.config, удостоверьтесь вдвойне, что она не опечатана, потому что это правильный способ хранения альтернативных строк подключения для наборов данных со строгой типизацией.

Внимание: приведенный выше xml работает для строго типизированных наборов данных в библиотеках классов C #. Для VB.Net измените MyDatasetLib.Properties.Settings на MyDatasetLib.My.MySettings

...