2015-01-20 2 views
0

У меня есть приложение .Net 4.5.1 Console, настроенное как служба Windows (происходит из ServiceBase), используя EntityFramework 6.1, установленную через пакет Nuget.Служба Windows Service, ссылающаяся на Entity Framework 6, не работает при развертывании

Он работает нормально работает локально (где я запускаю его как консольное приложение).

Разверните его на компьютере под управлением Windows Server 2008, на котором установлен .Net 4.5.2, зарегистрируйте его как службу Windows и успешно запустите службу.

Служба имеет таймер, который работает каждые 90 секунд. В первый раз он работает (через 90 секунд), когда он пытается прочитать из базы данных SQL Server, он терпит неудачу с этим сообщением об ошибке:

System.Configuration.ConfigurationErrorsException: The 'DbProviderFactories' section can only appear once per config file. 

я смотрел в 2 machine.config файлов на компьютере (в папках .Net 2 и 4) и подтвердил, что каждый из них имеет только один раздел DbProviderFactories. В моем сервисе app.config нет DbProviderFactories. В EventViewer нет никакой информации. Я переустановил .Net 4.5.2 и перезапустил сервер безрезультатно.

Как узнать, где он пытается загрузить два раздела DbProviderFactories?

Я добавляю эту следующую информацию на всякий случай, если она родная.

Второй раз служба делает работу (после 180 секунд), когда он пытается читать из той же базы данных SQL Server, он терпит неудачу с другим сообщением об ошибке:

The ADO.NET provider with invariant name 'System.Data.SqlClient' is either not registered in the machine or application config file, or could not be loaded. 

Это второе сообщение об ошибке похож на этот вопрос: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient' , но, к сожалению, я уже внедрил все предложения по его устранению.

Я установил Entity Framework 6 из пакета Nuget как на моем уровне доступа к данным, так и на мою службу окон приложений консоли. Установщик NuGet вставляли необходимые разделы в моем app.config:

<configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 

и

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
</entityFramework> 

я разворачивал, что Visual Studio помещает в мою папку бен, когда я строю. Развертывание включает в себя как EntityFramework.dll и EntityFramework.SqlServer.dll

Моя строка подключения к базе данных:

<connectionString value="data source=SQLServerName;initial catalog=DatabaseName;integrated security=true;persist security info=True" /> 

служба окон работает под идентичностью, которая имеет доступ к базе данных.

Эта вторая ошибка продолжается до тех пор, пока я не отключу службу.

ответ

0

Оказалось, это был ответ: The 'DbProviderFactories' section can only appear once per config file

Когда я заявил: «Я посмотрел в 2 machine.config файлов на компьютере (в папках .Net 2 и 4) и проверить, что каждый из них имеет только один DbProviderFactories ". это было ложно. Был дубликат, я просто не видел его в первый раз, когда смотрел.

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