Вы можете использовать очереди здесь, такие как MSMQ, RabbitMQ и т. Д. Каждый запрос, который должен быть выгружен, может быть поставлен в очередь, и внешняя служба будет извлекать элементы из очереди и начинать обрабатывать их один за другим. Сам сервис может быть обычным сервисом Windows, хотя вы можете использовать WCF здесь. Вы даже можете интегрировать рабочий процесс в него для более сложных сценариев обработки. Я обычно создаю отдельное пространство имен под названием «services.servicename» для этих типов проектов.
EDIT:
Вы, наверное, смотрите на 2 части здесь. Чтобы что-то подобное работало, вам понадобится служба, которая будет принимать запросы из вашего приложения и добавлять их в очередь. И еще один сервис, который фактически обрабатывает очередь. Вы, вероятно, смотрите на 3 различных проекта в своем решении для достижения этой цели. Я уже делал это с WCF раньше, поэтому мои предложения основаны на технологии WCF. Вот как будет выглядеть структура вашего проекта.
- MyCompany.Services.QueueRequest - принимает запросы от вашего приложения.
- MyCompany.Services.QueueRequestContract - Предоставляет контракт (интерфейс), который позволяет вашему приложению взаимодействовать со службой QueueRequest.
- MyCompany.Services.QueueProcessor - Фоновый процессор.
Ваша служба QueueRequest будет реализовывать интерфейс в пространстве имен QueueRequestContract вместо своего собственного. Мы делаем это для того, чтобы мы могли повторно использовать этот контракт на уровне приложений для связи со службой. Так это выглядит примерно так.
Ваше приложение -> QueueRequestContract (IMyService) -> Служба QueueRequest (реализует IMyService).