Служба WCF показывает ошибку после реализации в IIS

В моем проекте я использую Enterprise Library для подключения к базе данных. Он работает нормально, когда я запускаю приложение напрямую из Visual Studio.

Но это показывает ошибку подключения к базе данных при размещении в IIS на том же компьютере. Я добавил трассировку журнала и получил следующую ошибку

Ошибка разрешения зависимости, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "(none)". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException - невозможно создать базу данных типа. Вы должны настроить контейнер для предоставления этого значения. ----------------------------------------------- В это время исключения, контейнер был:

Разрешение Microsoft.Practices.EnterpriseLibrary.Data.Database, (нет) | Исключение: Microsoft.Practices.ServiceLocation.ActivationException: произошла ошибка активации при попытке получить экземпляр типа База данных, ключ "" ---> Microsoft.Practices.Unity.ResolutionFailedException: Ошибка разрешения зависимости, тип = "Microsoft.Practices. EnterpriseLibrary.Data.Database ", name =" (нет) ". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException - невозможно создать базу данных типа. Вы должны настроить контейнер для предоставления этого значения. ----------------------------------------------- В это время исключения, контейнер был:

Разрешение Microsoft.Practices.EnterpriseLibrary.Data.Database, (none) ---> System.InvalidOperationException: невозможно создать базу данных типа. Вы должны сконфигурировать контейнер для предоставления этого значения.
в Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.GuardTypeIsNonPrimitive (IBuilderContext context, SelectedConstructor selectedConstructor) в Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructor. .StrategyChain.ExecuteBuildUp (IBuilderContext контекст) на Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan (IBuilderContext контексте, NamedTypeBuildKey buildKey) при Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp (IBuilderContext контекста) при Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp ( IBuilderContext context) в Microsoft.Practices.Unity.UnityContainer.DoBuildUp (тип t, существующий объект, имя строки, IEnumerable1 resolverOverrides)
--- End of inner exception stack trace --- at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable
1 resolverOverrides) в Microsoft.Practices.Unity.UnityContainer.DoBuildUp (тип t, имя строки, IEnu merable`1 resolverOverrides) в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance (тип serviceType, строковый ключ) --- Конец трассировки стека внутреннего исключения --- в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance (тип serviceType, String key ) в Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance [TService] (строковый ключ) в Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.InnerCreateDatabase (строковое имя)

Моя web.config службы содержится, как показано ниже

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/>
  </configSections>
<dataConfiguration defaultDatabase="OracleConnection">
    <providerMappings>
      <add databaseType="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase, Microsoft.Practices.EnterpriseLibrary.Data" name="Oracle.DataAccess.Client"/>
    </providerMappings>
  </dataConfiguration>
  <connectionStrings>
      <add name="OracleConnection" providerName="Oracle.DataAccess.Client" connectionString="User Id=***;Password=****;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*****)(PORT=1500)) (CONNECT_DATA=(SERVER = DEDICATED) (SERVICE_NAME =*****)));"/>
<add name="SybaseConnection" connectionString="providerName=Sybase.ASEOLEDBProvider;Server=****;Port=5050;Catalog=**;User Id=***;Password=****"/>
      </connectionStrings>

Я много пробовал, но не смог найти причину проблемы. :(

Я проверил разрешение на папку, и у всех есть полный контроль. Служба WCF в IIS Анонимный доступ включен.

Может ли кто-нибудь помочь?


person Hari KRK    schedule 03.09.2011    source источник
comment
Это не похоже на проблему, связанную с WCF. Похоже, это проблема со сборкой Microsoft.Practices.EnterpriseLibrary.Data. Вы проверили настройку базы данных?   -  person Tim    schedule 03.09.2011
comment
да. С тем же кодом и теми же dll это нормально работает при прямом запуске из Visual Studio. Проблема возникает только при реализации в IIS   -  person Hari KRK    schedule 03.09.2011


Ответы (2)


Используемая вами сборка не может найти одну из сборок, от которых она зависит. Убедитесь, что все зависимости находятся либо в GAC, либо в папке bin вашего веб-приложения.

person Jonathan Henson    schedule 03.09.2011
comment
Спасибо, Джон, но как я могу определить, какие все зависимые библиотеки DLL? Более того, он отлично работает при запуске непосредственно из Visual Studio. Почему проблема возникает в IIS? - person Hari KRK; 03.09.2011
comment
У меня есть приложения, которые время от времени делают это, и это связано с тем, как Visual Studio развертывает двоичные файлы в вашей папке bin. Иногда он не улавливает их всех. Также иногда путь поиска немного отличается. Чтобы определить зависимости, я бы попробовал посмотреть документацию на сборку. Также убедитесь, что папка bin в развернутом приложении выглядит идентично папке bin в приложении Visual Studio. - person Jonathan Henson; 03.09.2011
comment
Когда я включил 32-битные приложения в IIS, ошибка была изменена на ORA-12638: Не удалось получить учетные данные. Строка подключения верна, которая работает с Visual Studio. Есть ли какие-то настройки, которые нам нужно сделать в части Oralce, чтобы получить доступ к соединению из IIS? - person Hari KRK; 05.09.2011
comment
@Hari Используете ли вы аутентификацию Windows? Если это так, проблема может быть в том, что у пользователя iis нет доступа. Попробуйте выдать себя за своего пользователя, который, как вы знаете, работает в вашем файле web.config. - person Jonathan Henson; 05.09.2011

Когда я включил 32-битные приложения в IIS, ошибка была изменена на

ORA-12638: Не удалось получить учетные данные.

Строка подключения правильная, которая работает с Visual Studio.

Есть ли какие-то настройки, которые нам нужно сделать в части Oralce, чтобы получить доступ к соединению из IIS?

Это нормально работало при обновлении файла sqlnet.ora оракула.

person Hari KRK    schedule 04.09.2011