Как заставить IIS ждать готовности службы WCF? - PullRequest
3 голосов
/ 12 апреля 2010

У меня есть служба WCF, размещенная в IIS 7. Потребуется несколько минут, чтобы эта служба завершила загрузку своих данных и была готова к внешним вызовам. Данные загружаются во внутренний поток. Проблема заключается в том, что с точки IIS служба готова сразу после ее активации (каким-либо вызовом) и обрабатывает запрос, не ожидая загрузки данных.

Можно ли сообщить IIS, что служба все еще загружается, и сделать эту службу недоступной для запросов? Нет проблем, если такой запрос вызовет исключение.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

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

Вот краткий пример:

public class MyService : IMyService
{
    public MyService()
    {
        // Blocking call that initializes
        // the service instance
        this.Initialize();
    }

    public void GetData()
    {
        // The service operation will be invoked
        // after the service instance has been created
        // at which point the initialization is complete
    }

    private void Initialize()
    {
        // Initialization logic
    }
}

Если логика инициализации стоит дорого, вам следует рассмотреть возможность запуска службы как одиночной, чтобы цена оплачивалась только по первому запросу . В качестве альтернативы вы можете хранить данные, загруженные во время инициализации, в централизованном кэше. Таким образом, его можно сделать доступным для нескольких экземпляров службы, при этом его необходимо загрузить только один раз.

Если логика инициализации используется несколькими службами, вам следует рассмотреть возможность ее реализации один раз в пользовательском ServiceHost путем переопределения OnOpening метод. Поскольку вы размещаете свои службы в IIS, вам также потребуется реализовать пользовательский ServiceHostFactory для создания экземпляров вашего ServiceHost.
Подробнее об этом подходе вы можете прочитать в этой статье MSDN .

1 голос
/ 13 апреля 2010

Обнаружена эта новая функция, описанная в «Обзоре веб-разработки ASP.NET 4 и Visual Studio 2010»: http://www.asp.net/LEARN/whitepapers/aspnet4/#0.2__Toc253429241

Проблема в том, что требуется IIS 7.5, работающий на Windows Server 2008 R2, но работающий с ASP.NET 2.0 +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...