DatabaseFactory.CreateConnection () выбрасывает ссылку на объект, не установленную для экземпляра объекта - PullRequest
1 голос
/ 23 августа 2011

У меня есть клиентское приложение, которое использует службу WCF, выдает ошибку

Ссылка на объект не установлена ​​для экземпляра объекта.

подробности:

Я использую службу WCF с библиотекой Microsoft Enterprise для подключения к базе данных, служба работает нормально в автономной среде, но выдает ошибку, если размещена как windows service. Я не могу отладить службу WCF, так как она размещена как служба Windows, поэтому я попытался использовать блоки try catch, чтобы выяснить, в чем проблема.

Я наткнулся на эти две строки, которые показались мне наиболее подозрительными

Database db = DatabaseFactory.CreateDatabase();
DbConnection conn = db.CreateConnection();

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

Пожалуйста, помогите.

Пытался найти аналогичный вопрос о переполнении стека, но не смог, поэтому отправил.

Оператор добавленного вопроса с ошибкой snap + трассировка стека ...

enter image description here

трассировка стека

в Microsoft.Practices.EnterpriseLibrary.Data.DatabaseConfigurationView.get_DefaultName ()

в Microsoft.Practices.EnterpriseLibrary.Data.DatabaseMapper.MapName (имя строки, IConfigurationSource configSource)

в Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfigurationNameMappingStrategy.BuildUp (контекст IBuilderContext, тип t, объект существует, идентификатор строки)

в Microsoft.Practices.ObjectBuilder.BuilderBase`1.DoBuildUp (локатор IReadWriteLocator, тип typeToBuild, строка idToBuild, существующий объект, PolicyList [] transientPolicies)

в Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp (локатор IReadWriteLocator, тип typeToBuild, строка idToBuild, существующий объект, PolicyList [] transientPolicies)

в Microsoft.Practices.ObjectBuilder.BuilderBase`1.BuildUp [TTypeToBuild] (локатор IReadWriteLocator, строка idToBuild, объект существует, PolicyList [] transientPolicies)

в Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp [T] (локатор IReadWriteLocator, источник конфигурации IConfigurationSource)

в Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp [T] (IConfigurationSource configurationSource)

в Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.NameTypeFactoryBase`1.CreateDefault ()

в Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase ()

в WCFService.Service1.ExecuteSFDS (Cmd CmdObj, Int32 executeType) в D: \ Projects \ WCFService \ WCFService \ Service1.cs: строка 32

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Я почти уверен, что это потому, что app.config не копируется в вывод. Убедитесь, что файл конфигурации находится в каталоге, из которого запускается ваш процесс, со следующим именем «YourServiceName» .exe.config

Если это так, во время отладки проверьте, можете ли вы использовать ConfigurationManager для получения строки подключения, также убедитесь, что имя вашей строки подключения является правильным.

EDIT

Конечный результат от комментария:

Мне не хватало строки подключения в выходном файле конфигурации, а во-вторых, я определил ту же конечную точку и базовый адрес, поэтому я просто изменил адрес конечной точки на "".

0 голосов
/ 23 августа 2011

Служба Windows обычно выполняется под именем «Локальная система» или «Сетевая система».Если ваше подключение к базе данных использует встроенную безопасность Windows, вы обнаружите, что оно не может подключиться к базе данных.

Чтобы быстро обойти эту проблему, запустите службу под именем пользователя в рабочей группе / домене, который имеет доступ к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...