ПОМОЩЬ! - DefaultServiceHostFactory выполняется перед созданием application_startup и контейнера

Я использую средство WCF для службы, размещенной в WAS (привязка net.tcp в iis7), и испытываю странную проблему только при холодном запуске приложения (т.е. еще не запущенном).

Следующий оператор должен выполняться при первом создании моего контейнера.

DefaultServiceHostFactory.RegisterContainer(c.Kernel);

Когда служба запрашивается, я получаю следующее исключение в моем файле трассировки WCF

Ядро было пустым, вы забыли вызвать DefaultServiceHostFactory.RegisterContainer()

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

Примечание.

  • Это исключение происходит ДО выполнения Application_Start.
  • Если приложение запущено (и контейнер инициализирован), служба будет работать должным образом. Приложение можно запустить, перейдя на соответствующий сайт IIS через HTTP или запустив сеанс отладки из Visual Studio.

Шаги по воссозданию проблемы

  • Выполните IISReset, чтобы закрыть все пулы приложений IIS.
  • Позвоните в интересующую вас службу
  • Трассировка WCF выдает:

    System.ServiceModel.ServiceActivationException: служба «/abcd.svc» не может быть активирована из-за исключения во время компиляции. Сообщение об исключении: Исключение было сгенерировано целью вызова. ---> System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---› System.ArgumentNullException: ядро ​​было пустым, вы забыли вызвать DefaultServiceHostFactory.RegisterContainer()? Имя параметра: ядро ​​в Castle.Facilities.WcfIntegration.WindsorServiceHostFactory`1..ctor(ядро IKernel) в Castle.Facilities.WcfIntegration.DefaultServiceHostFactory..ctor()


person David Christiansen    schedule 18.04.2011    source источник
comment
Пожалуйста, скажите мне, если мне нужно больше объяснить мою ситуацию или прояснить ее.   -  person David Christiansen    schedule 21.04.2011


Ответы (1)


Проблема в том, что global.asax и все его методы связаны только с обработкой HTTP. Кстати. класс в global.asax является производным от HttpApplication, что должно прояснить ситуацию. После того, как вы разместите приложение в WAS (в случае привязки на основе net.tcp), вы не сможете использовать эти методы. Попробуйте использовать что-то вроде AppInitialize.

person Ladislav Mrnka    schedule 21.04.2011