Веб-сервис и опрос - PullRequest
       17

Веб-сервис и опрос

3 голосов
/ 28 января 2009

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

По сути, мой вопрос заключается в том, что было бы наилучшим способом реализовать это, если бы вы могли подключаться только от клиента к WebService (уведомление невозможно)

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

Что ты думаешь?

Ответы [ 5 ]

3 голосов
/ 28 января 2009

Вы, вероятно, хотите взглянуть на комету

2 голосов
/ 28 января 2009

Я бы предложил, если возможно, своего рода интеллектуальный опрос:

  • При первом запросе верните токен для представления запроса. Это то, что будет представлено в будущих запросах, поэтому легко проверить, действительно ли этот запрос был выполнен.
  • В будущих запросах удерживать соединение открытым в течение определенного времени (например, минуты, возможно, указанного на клиенте) и возвращать либо результат или результат " результатов по-прежнему нет; пожалуйста, попробуйте еще раз в X ", где X - лучшее предположение, которое у вас есть, когда ответ будет завершен.

Преимущества:

  • Вы разрешаете клиенту использовать модель «держать соединение открытым», которая является относительно дорогой (с точки зрения соединений), но позволяет обслужить ответ, как только он будет готов. Убедитесь, что вы не цепляетесь за каждое соединение! (И есть какое-то ограничение по времени ...)
  • Говоря, когда клиент должен вернуться, вы можете реализовать политику отката - даже если вы не знаете, когда он будет готов, вы можете иметь «отсрочку на 1, 2, 4, 8, 16, 30». , 30, 30, 30 ... "минут политики. (Возможно, вам следует убедиться, что клиент не игнорирует это.) Вы не получите массу ненужных опросов для длительных промахов, но вы все равно быстро получите результаты.
1 голос
/ 28 января 2009

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

Почему опрос плохой? Конечно, если вы настроите частоту опроса, это не будет так плохо. Prehaps удваивает время между опросами с максимум около пяти минут.

0 голосов
/ 28 января 2009

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

Почему вы хотите, чтобы пользователь ждал столь долгого выполнения задачи? Пусть они посмотрят статус операции где-нибудь.

0 голосов
/ 28 января 2009

Некоторые веб-службы, с которыми я работал, возвращают сообщение «Пожалуйста, попробуйте еще раз в», если они не могут ответить немедленно. Я понимаю, что это всего лишь доработка метода опроса, но если ваш сервер может определить во время запроса, какой вероятной будет задержка, он может сообщить об этом клиенту, а затем забыть об этом, оставив клиента спросите снова, когда интервал опроса истек.

...