Member 10863214 Ответов: 1

Как создать односторонний веб - сервис?


Привет всем, название вопроса может быть недостаточно ясным, позвольте мне объяснить предысторию здесь:

Я хотел бы создать веб-сервис, который генерирует PDF-файл и отправляет его на принтер, вот рабочий процесс:

1. пользователь отправляет запрос в веб-службу, вероятно, запрос будет одноразовым, чтобы пользователь не страдал от ожидания завершения задания. Пользователь может получить HTTP200 и продолжить свою работу.

2. Как только веб-служба получила запрос, так как я не хочу сливать весь ресурс на этот сервер, я могу использовать шаблон producer consumer здесь, там может быть очередь, чтобы поставить в очередь клиентские задания, и обрабатывать их один за другим.

Мои вопросы таковы:
1. я новичок в C#, каков правильный шаблон для очереди и обработки их? Должен ли я использовать ConcurrentQueue и ThreadPool для его архивирования?

2. Как правильно уведомить Пользователя о том, что задание выполнено успешно/неудачно? Вместо того, чтобы использовать услугу callback, является асинхронный идеальным образом? Меня беспокоит то, что в очереди может быть много заданий, и я не хочу, чтобы клиент страдал от ожидания их завершения.

3. веб-служба помещается за балансировщиком нагрузки, как я могу поддерживать "очередь процессов" среди них? Я пробовал использовать Hangfire, и это кажется нормальным, есть ли альтернатива?

4. Как я могу узнать, сколько заданий находится в очереди/ как поток может быть запущен в данный момент? Веб-сервис будет развернут на IIS, есть ли собственный способ архивировать его или я должен реализовать вызов веб-службы для их получения?

Любая помощь будет оценена по достоинству, спасибо!

Что я уже пробовал:

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

Gerry Schmitz

Похоже, ты читаешь сценарий. Если бы вы понимали, о чем просите, вы бы и половины не просили.

1 Ответов

Рейтинг:
0

Wastedtalent

Цитата:
1. я новичок в C#, каков правильный шаблон для очереди и обработки их? Должен ли я использовать ConcurrentQueue и ThreadPool для его архивирования?

2. Как правильно уведомить Пользователя о том, что задание выполнено успешно/неудачно? Вместо того, чтобы использовать услугу callback, является асинхронный идеальным образом? Меня беспокоит то, что в очереди может быть много заданий, и я не хочу, чтобы клиент страдал от ожидания их завершения.

3. веб-служба помещается за балансировщиком нагрузки, как я могу поддерживать "очередь процессов" среди них? Я пробовал использовать Hangfire, и это кажется нормальным, есть ли альтернатива?

4. Как я могу узнать, сколько заданий находится в очереди/ как поток может быть запущен в данный момент? Веб-сервис будет развернут на IIS, есть ли собственный способ архивировать его или я должен реализовать вызов веб-службы для их получения?


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

2. Опять же, нет никакого "правильного пути", и если вас просят что-то разработать, то требуемый путь должен быть указан в спецификации. Вы можете использовать веб-крючки для обратного вызова, вы можете использовать SMS или электронную почту, если вы уведомляете конечного пользователя, все допустимые методы уведомления в зависимости от требований.

3. Hangfire-отличный инструмент, я большой поклонник, в качестве альтернативы, такие варианты, как очереди сообщений/шины, также могут быть рассмотрены.

4. Hangfire или шины сообщений будут иметь количество заданий в очереди, которые будут доступны. Вам нужно будет запросить их, IIS не будет хранить эту информацию.

Удачи вам!