Как получить по частям данные из службы WCF

Я создал приложение .Net, которое позволяет запрашивать журналы IIS некоторых веб-серверов. Приложение вызывает службу WCF для получения данных. В расположении службы WCF есть журналы IIS. Служба WCF внутренне вызывает Logparser для файлов журнала IIS и возвращает результат. Существует несколько файлов журнала IIS. Если я запускаю logparser для всех из них за один раз, для возврата потребуется много времени, поскольку запрашивается около 30 огромных файлов журнала IIS. Я хочу запускать logparser для каждого из этих журналов IIS один за другим и возвращать результат один за другим.

Я ищу структуру, которая работает над WCF и позволяет извлекать данные по частям из службы WCF. Итак, я хочу получить результат IISlogfile1, затем IISlogfile2 и так далее. В противном случае пользовательскому интерфейсу придется очень долго ждать, чтобы получить полный результат за один раз.

Знаете ли вы о какой-либо существующей структуре, которая позволяет по частям извлекать данные из службы WCF?

PS: У меня есть обходной путь: вызывать службу несколько раз, по одному разу для каждого файла журнала IIS, пока она не ответит, что все данные отправлены. Но я ищу более чистое решение.


person Souvik Basu    schedule 07.07.2012    source источник
comment
В настоящее время я занимаюсь самообразованием в WCF, так что потерпите меня, но как насчет того, чтобы сделать вызов метода асинхронным, чтобы избежать блокировки клиента?   -  person Lieven Keersmaekers    schedule 08.07.2012


Ответы (2)


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

Изменить:

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

person muruge    schedule 09.07.2012

Ну Сувик басу,

Я не уверен, поможет это или нет, но вы можете сделать это.

Сначала вызовите службу WCF, чтобы получить количество файлов, которые у вас есть.

Затем внутри цикла вы вызываете службу WCF с именем файла и связываете их с помощью gridview+jqgrid или некоторой магии асинхронного вызова.

Таким образом, вы можете прогрессировать и отображать данные асинхронно, и ваша задержка будет меньше. Ваш сервис WCF также будет менее загружен.

Надеюсь, я ясно выразил свою точку зрения.

person Jigar Pandya    schedule 07.07.2012
comment
Спасибо за ответ Джигар. В настоящее время я использую асинхронные вызовы службы и вызываю их в цикле с клиента. Но это не очень чисто, и я ищу любую встроенную структуру, которая может разрешить такое поведение. - person Souvik Basu; 13.07.2012