Есть ли возможность отложить ответ службы WCF без блокировки рабочего потока - PullRequest
0 голосов
/ 20 марта 2012

Да, это звучит довольно бессмысленно, но у меня есть реальное требование отложить ответ службы WCF как минимум на семь секунд. Это делается сейчас с System.Threading.Thread.Sleep(), который называется блокирующим. Поэтому я хотел бы найти решение, которое оставляет рабочий поток доступным для других запросов. Я также попробовал System.Timer, который также оказался блокирующим.

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

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

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

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

0 голосов
/ 28 апреля 2016

Старый вопрос, но если кому-то понадобится такая (странная) возможность ...

Как по мне, это работает с атрибутом

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
                 ConcurrencyMode = ConcurrencyMode.Multiple)]

для класса обслуживания и

Thread.Sleep(10000);

до возврата метода;

0 голосов
/ 20 марта 2012

Пока клиент ожидает синхронный вызов , вы застреваете, удерживая поток, пока запрос не будет обработан и ответ не будет возвращен.Вы можете попробовать экзотические хаки, такие как реализация IInstanceProvider или создание поведения операции для обработки требуемой задержки, но в итоге вы все еще держитесь за поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...