2015-11-02 5 views
1

Я написал проект web-api, чтобы действовать как мост/шлюз между двумя подсистемами.C# Web-Api - обработка входящих запросов ', чтобы они были получены'

Мне нужно убедиться, что входящие запросы обрабатываются «в том порядке, в котором они получены». Я не слишком хорошо знаком с тем, как работает web-api и у меня есть проблема:

  1. Входит входящий запрос, операция запускается и длится 30 секунд.
  2. В течение 5 секунд после обработки первого запроса и получения второго запроса и его также немедленно обрабатывают.

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

Кто-нибудь знает, работает ли как-то вроде web-api, как это уже, или что мне нужно сделать, чтобы получить такое поведение?

+0

довольно уверен, что такого механизма не существует в веб-API, так как вам нужен какой-то ключ для блокировки других запросов. Тем не менее, для решения вашей проблемы вам понадобится какой-то механизм семафора. Но вы также должны думать о возможных таймаутах в этом случае. –

+0

В зависимости от того, что вы хотите отправить назад пользователю, вы можете поставить очередь запросов и отправить ответ «очереди». Не определен для веб-API, но будет отвечать вашим требованиям. –

ответ

1

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

static bool bInProcess = false; 

Теперь, когда вы получаете запрос установить эту переменную истинны и сделать ваш процесс. После того как вы закончите с вашим процессом, установите для этой переменной значение false; Во время вашего процесса, если приходит другой запрос, проверьте эту переменную, если ее истина затем помещает текущий поток в спящий режим в течение 1 секунды и проверяет до его истины. ИЛИ вы можете вернуть ошибку, выполняемую другим процессом.

//Sample for loop to Queue 2nd request 
while (bInProcess) 
      { 
       Thread.Sleep(1000); 
      } 

Вы должны быть очень осторожны в этом коде. В классе «WebApiConfig» добавьте класс обработчика сообщений и напишите этот код в этом классе. Используйте этот метод «config.MessageHandlers.Add». Я сделал это давным-давно, поэтому я знаю, что это работает.

+0

Как это 1. Безопасный поток? 2. Сон будет блокировать вашу нить -Boo. 3. Почему бы просто не использовать токен параллелизма? \ –

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