Entity Framework Architecture для долго работающей службы Windows - PullRequest
2 голосов
/ 28 марта 2011

У меня есть вопрос, как наилучшим образом построить свое решение с использованием Entity Framework в службе Windows.

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

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

Яиспользуя Entity Framework для хранения истории всех заданий.Однако я не совсем уверен, как мне следует смоделировать взаимодействие между фоновым процессом выполнения заданий (с текущей информацией о ходе выполнения) и службами wcf, отображающими этот статус.

Должен ли я полностью разделить обе части, позволяя фонупроцесс периодически записывает текущее состояние в базу данных, и службы WCF опрашивают информацию оттуда?

Или имеет ли смысл, что служба WCF напрямую получает информацию из фонового процесса, обращающегося к статическому члену или к чему-то подобному?Должны ли они совместно использовать DataContext?

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

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

Хорошим решением является очередь сообщений (MSMQ, таблица и т. Д.) Между веб-интерфейсом и рабочими.

Веб-интерфейс ставит в очередь сообщения и опрашивает их статус по мере необходимости. Рабочий (возможно, более одного) выбирает сообщение, обрабатывает его и обновляет статус.

Если рабочий сбой, сообщение должно вернуться в очередь.

0 голосов
/ 28 марта 2011

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

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

...