Подтвердить что ты не робот

Запуск функции при запуске WCF

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

Служба будет в конечном итоге размещена в IIS и использует .Net Framework 4.5

4b9b3361

Ответ 1

Что предлагал @KirkWoll, но только если вы работаете в IIS и только в статическом методе AppInitialize в App_Code. Если вы хотите выполнить инициализацию для каждой службы, если у вас есть другой метод AppInitialize или если вы не находитесь под IIS, у вас есть следующие варианты:

  • Если вы используете .NET Framework 4.5 и под IIS: вы можете использовать метод настройки службы, который будет вызываться при запуске службы. Дополнительная информация на http://msdn.microsoft.com/en-us/library/hh205277(v=vs.110).aspx.
  • Если вы самостоятельно размещаете свою услугу, вы контролируете запуск службы (вызов ServiceHost.Open(), поэтому вы можете ее инициализировать там
  • Если вы находитесь под IIS, а не на 4.5, вы можете использовать хост службы factory и настраиваемый хост службы, который будет вызываться при открытии хоста службы. В этот момент вы можете выполнить свою инициализацию. Вы можете найти больше о фабриках хостов-служб на http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspx.

Пример пользовательского factory показан ниже:

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
        host.Opening += new EventHandler(host_Opening);
        return host;
    }

    void host_Opening(object sender, EventArgs e)
    {
        // do initialization here
    }
}

}

Ответ 2

Самый простой способ - создать папку App_Code под вашим корнем проекта WCF, создать класс (я буду называть его Initializer, но это не имеет значения. Важная часть - это имя метода):

public class Initializer
{
    public static void AppInitialize()
    {
        // This will get called on startup
    } 
}

Более подробную информацию о AppInitialize можно найти здесь.