2014-01-20 3 views
2

Я интересно, что предпочтительная архитектура будет в следующей ситуации:Preferred архитектура для запуска отдельного процесса

Я обязан иметь приложения .NET, который будет выполнять пакетную загрузку нескольких файлов данных одновременно в SQL Server. Это будет вызвано из приложения WPF, которое позволит пользователю выбирать файлы и таблицы назначения, а также сообщать о каждом прогрессе для каждой загрузки (включая сообщения об ошибках). У меня нет абсолютно никакой проблемы с написанием кода для любого из этого. Однако существует требование, что пользователь может полностью закрыть приложение WPF и продолжить процесс загрузки. Кроме того, если пользователь перезапускает приложение WPF с одного и того же компьютера, он должен иметь возможность получить дескриптор существующих загрузок и сообщить о статусе, как если бы программа никогда не закрывалась.

Мой вопрос: каковы способы достижения этого и который будет казаться наиболее стандартным/подходящим?

Я рассматривал просто не закрытие приложения WPF, а скрытие всех окон, но это кажется обманом. Было бы лучше создать службу WCF на сервере, где происходит загрузка, и просто загрузить файл? Я не думаю, что могу это сделать и сообщить о прогрессе% и т. Д. Что можно сказать о локально функционирующей службе Windows, могу ли я добиться аналогичного эффекта? Должен ли я думать о MemoryMappedFiles?

Цените все свои мысли.

+0

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

ответ

1

Поскольку вы говорите о долговременной задаче, я бы использовал локальную службу Windows, которая связывается с вашим приложением WPF через MSMQ. Например, каждый загружаемый файл может быть представлен одним сообщением MSMQ. Ваше приложение WPF будет помещать сообщения в очередь и службу Windows, периодически и без каких-либо последствий, если WPF работает или нет, должен принимать его из очереди и процесса. Это обеспечит простой и надежный канал для предоставления задач (загрузок).

Чтобы обеспечить внутреннее состояние службы Windows своим клиентам (ваше приложение WPF), я бы разместил внутри нее конечную точку WCF с простой службой, которая сообщает, например, о ходе.

+0

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

Смежные вопросы