У меня есть простое приложение, в котором я использую global.asax для сопоставления serviceroute с wcf-сервисом через пользовательский servicehostfactory в Application_Start. Конструктор этой службы выполняет некоторую начальную обработку для настройки службы, которая занимает немного времени.Как мне получить услугу, чтобы начать с global.asax без необходимости ее вызывать?
Мне нужен этот конструктор для запуска, когда его serviceroute добавляется автоматически. Я попытался создать clientchannel из global.asax и сделать фиктивный вызов, чтобы развернуть службу, но обнаружил, что служба еще не встала - кажется, приложение application_start должно вернуться?
Как я могу заставить конструктор службы запускаться при первом сопоставлении через global.asax без необходимости вручную удалять службу? К сожалению AppFabric это не вариант для нас, так что я не могу просто использовать это встроенный в автозапуск ..
UPDATE
меня попросили немного более подробно;
Это похоже на службу управления маршрутами. Поэтому у меня есть Service1 - он добавляется как serviceroute в global.asax. Теперь у меня есть http://localhost/Service1
Внутри Service1 У меня есть метод под названием addServiceRoute. При вызове он также регистрирует маршрут для Service2. Теперь у меня есть http://localhost/Service1/Service2.
Моим первоначальным решением от global.asax было построить канал для http://localhost/service1, но это не сработало. Service1 еще не был включен и не появлялся до появления Application_Start (все еще не уверен, почему?). Итак, я подумал, что обманываю и перемещаю этот начальный adderviceroute вызов конструктору service1. И не работал.
Было упомянуто, что это не должно быть в конструкторе - я согласен, это просто проверка кода.
Был упомянут синглтон, который может быть в порядке, но я намерен иметь более одного экземпляра Service1 на машине (в том же пуле приложений), поэтому я не думаю, что это сработает?
** UPDATE # 2 ** меня попросили образец кода .. здесь из global.asax (обрезается немного для краткости) .. Так http://localhost/Test приходит вверх .. Но если я должен использовать AppFabric разогреть Тест и запустить его конструктор, тогда мне не нужно Test.svc или что-то еще? Как я могу получить appfabric, даже если эта служба существует?
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
RouteTable.Routes.Add(
new ServiceRoute("Test", new MyServiceHostFactory(ITestService, BindingType.BasicHttpBinding, true), TestService));
}
Если бы вы могли добавить немного больше информации, я думаю, что смогу вам помочь. Вы говорите, что хотите, чтобы метод WCF вызывался при запуске пула приложений? Что AppFabric связано с этим, вы используете это для своего рода кеширования? –
Обновление в статье с деталями – XeroxDucati
Это связано с AppFabric в том, что AppFabric больше, чем кеширование, оно также помогает управлять службами WCF. См. Http://msdn.microsoft.com/en-us/library/ee677285.aspx для получения информации о автозапуске. – Rich