Проверьте состояние работы сервера в C #.Проверьте состояние процесса сервера (бизнес-операция) - PullRequest
1 голос
/ 20 января 2012

Клиентское приложение инициирует процесс на сервере (через RIA, но реализация не важна). Когда я говорю «процесс», я имею в виду, что бизнес-код работает, а не ссылается на фактический процесс, выполняющийся в ЦП.

Код C #.

Затем клиент проверяет статус процесса. Не удалось, завершено, все еще работает.

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

Крайние случаи вокруг этого требуют немного больше работы. Неустранимые и катастрофические причины, которые ненормально прерывают поток (процесс), не позволяя коду обработать исключение и изящно установить состояние, связанное с процессом, для сбоя. В этом случае клиент будет продолжать предполагать, что процесс все еще продолжается.

Я думал о запуске процесса в отдельном потоке и отслеживании его идентификатора. Когда клиент вызывает сервер для проверки состояния процесса, мы можем проверить свойство IsAlive потока, выполняющего процесс.

Мне интересно, есть ли сценарии, где это может быть проблематично? Возможно, существует вероятность того, что IsAlive вернет True, хотя поток завис.

Другой подход заключается в том, чтобы процесс на сервере периодически устанавливал временную метку, которую можно использовать, когда клиент проверяет состояние. Код, проверяющий состояние, может видеть, сколько лет отметке времени, а затем, основываясь на любом интервале, который мы выбрали (скажем, 2 минуты), он может решить, выполняется ли процесс все еще (2 минуты не прошло с момента последней записанной отметки времени), или процесс бездействовал по истечении времени ожидания (прошло более 2 минут с момента, когда поток записал последнюю метку времени) Все метки времени будут храниться в памяти.

Существуют ли какие-либо лучшие практики, связанные с этим, которые могут быть полезными? Есть ли у кого-нибудь особые идеи или советы о том, как лучше всего к этому подойти? Я также открыт для других сценариев или идей, которые есть у людей?

1 Ответ

0 голосов
/ 22 июня 2012

Я уверен, что лучший подход - иметь полностью управляемое серверное приложение, которое обрабатывает все, включая исключения для каждого бизнес-процесса, и поддерживает состояние всех.и даже лучше, если клиент получает событие StateChanged, а не опрос (например, с дуплексными каналами WCF).что вы делаете в 1999 году в основном..NET дает вам все вещи почти бесплатно.правильная архитектура на самом деле быстрее писать и дешевле поддерживать.

...