ПОМОГИТЕ! - DefaultServiceHostFactory, выполняющийся перед application_startup и созданием контейнера - PullRequest
0 голосов
/ 18 апреля 2011

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

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

DefaultServiceHostFactory.RegisterContainer(c.Kernel);

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

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

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

Примечание:

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

Действия по воссозданию проблемы

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

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

1 Ответ

1 голос
/ 21 апреля 2011

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

...