Как сделать длинный опрос клиента в C #? - PullRequest
3 голосов
/ 07 октября 2009

У меня есть настольное приложение на C #, и я без проблем использую веб-сервис (wsdl добавлен как «add Service References», поэтому я создаю объект и вызываю его функции).

Теперь я хочу использовать длинные методы опроса, но не могу понять, как это сделать с точки зрения клиента.

Как настроить время ожидания? Должен ли я использовать тему, посвященную этому? Есть ли пример для настольного приложения C #? (не нашел)

Спасибо, Плотины

Ответы [ 2 ]

4 голосов
/ 07 октября 2009

Вы должны быть в состоянии настроить время ожидания для объекта веб-службы - детали будут зависеть от того, какой именно класс он использует, но посмотрите на WebClientProtocol.Timeout для примера.

Теперь вы можете либо вызвать это синхронно из выделенного потока, либо вы можете сделать асинхронный вызов веб-службы для начала, указав обратный вызов для выполнения (возможно, в потоке пула потоков) когда служба отвечает. В этом случае может оказаться, что вы можете указать время ожидания самого асинхронного вызова - опять же, это будет зависеть от того, какой именно класс прокси веб-службы у вас есть.

Таким образом, вам не нужно «тратить» поток, просто ожидая ответа - но вы можете обнаружить, что модель асинхронного программирования сложнее понять, чем синхронную. Если у вас есть только один или два из этих запросов одновременно, дополнительная пара потоков вряд ли будет проблемой. Если вы ждете ответов от 500 различных сервисов, это другой вопрос, и асинхронная модель определенно поможет.

1 голос
/ 07 октября 2009

По поводу проблем с потоками см. Ответ Джона.

Для решения проблемы времени, вот решение: В версии 2008 года, когда я добавляю «ссылку на службу» из wsdl, он будет использовать WCF по умолчанию, и я не могу найти, как установить значение тайм-аута с ним.

Таким образом, при щелчке правой кнопкой мыши на Сервисных ссылках я должен выбрать «веб-ссылки» (расширенный / добавить веб-ссылку). Таким образом, он будет использовать только «обычные» веб-сервисы, а параметр Timeout доступен.

...