Существует ли пример начинания работу, если Сервис WCF онлайн? [дубликат]

5
задан apolfj 19 May 2010 в 16:30
поделиться

3 ответа

Что за одержимость проверкой наличия этих сервисов ??

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

Нет никакой пользы в том, чтобы постоянно посылать «ты здесь?» запросы по всей сети ...

Даже если бы у вас могло быть что-то вроде метода Ping () (который просто возвращает фиксированное значение или что-то в этом роде - имя вашей службы или что-то еще) - он только проверяет, действительно ли ваш сервис доступен - как насчет базы данных, из которой вам нужно запросить данные? А как насчет других услуг, от которых зависит ваш метод обслуживания? Становится довольно запутанным, и очень-очень сложно найти способ все это проверить - просто чтобы посмотреть, есть ли оно.

Вкратце: нет, не существует надежного и значимого способа проверить, существует ли данная услуга «там» и «жива» - просто позвоните ей! И будьте готовы справиться с ошибкой - она ​​ временами дает сбой ....

11
ответ дан 18 December 2019 в 09:05
поделиться

Нет смысла проверять, работает служба или нет. Абсолютно никакой. Почему?

if(serviceIsAlive())
{
    callService();
}
else
{
    handleFailure()
}

Вы видите проблему с этим фрагментом? Что произойдет, если между моментом, когда вы проверяете, работает ли служба, и временем, когда вы ее вызываете, служба отключается? Это состояние гонки и ошибка, ожидающая своего появления. Итак, что вам нужно сделать, даже если вы можете проверить условие обслуживания, это:

if(serviceIsAlive())
{
    try
    {
        callService();
    }
    catch(CommunicationException)
    {
        handleFailure();
    }
}
else
{
    handleFailure();
}

Но в этом блоке вызов handleFailure () находится в двух разных местах - у нас есть два разных пути для обработки одного и того же состояния ошибки. - что кажется плохим. Таким образом, это можно безопасно сократить до:

try
{
    callService();
}
catch(CommunicationException)
{
    handleFailure();
}
5
ответ дан 18 December 2019 в 09:05
поделиться

Если ваш сервис размещен в IIS (или WAS), вы можете выполнить resiliency, встроенную в модель процессов IIS6/7. Если рабочий процесс выйдет из строя, вместо него будет запущен другой. Как это работает? Используем Ping для анализа. Это называется AppoPool Health Monitoring (описано здесь).

2
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: