Как получить данные по частям из сервиса WCF
Я создал приложение.Net, которое позволяет запрашивать журналы IIS некоторых веб-серверов. Приложение вызывает сервис WCF для получения данных. Расположение службы WCF содержит журналы IIS. Служба WCF внутренне вызывает Logparser для файлов журнала IIS и возвращает результат. Есть несколько файлов журнала IIS. Если я запускаю logparser на всех из них за один раз, для возврата требуется много времени, поскольку запрашивается около 30 огромных файлов журнала IIS. Я хочу запустить logparser для каждого из этих журналов IIS один за другим и возвращать результат один за другим.
Я ищу структуру, которая работает над WCF и позволяет извлекать данные по частям из службы WCF. Поэтому я хочу получить результат IISlogfile1, затем IISlogfile2 и так далее. В противном случае пользовательский интерфейс должен будет ждать очень долго, чтобы получить полный результат за один раз.
Знаете ли вы о какой-либо существующей структуре, которая позволяет по частям извлекать данные из службы WCF?
PS: Обходной путь, который я имею, состоит в том, чтобы вызвать службу несколько раз, один раз для каждого файла журнала IIS, пока он не ответит, что все данные отправлены. Но я ищу более чистое решение.
2 ответа
Этот вопрос кажется очень связанным с вашим сценарием, посмотрите, поможет ли вам ответ Стивена Чена. Суть его ответа в том, что вы можете попробовать дуплексные службы, где сервер может вызвать клиента, когда он завершит обработку каждого файла журнала.
Редактировать:
Также взгляните на платформу SignalR, чтобы установить постоянное соединение между сервером и клиентом, чтобы вы могли отправлять уведомления (в файле журнала вашего дела) с сервера, когда он заканчивает обработку. Пример здесь.
Ну и Сувик басу,
Я не уверен, помогает ли это или нет, но вы можете сделать это так.
Сначала вызовите службу WCF, чтобы узнать количество имеющихся у вас файлов.
Затем внутри цикла вы вызываете службу WCF с именем файла и связываете их с помощью gridview+jqgrid или некоторой асинхронно вызывающей магии.
Таким образом, вы можете прогрессировать и показывать данные асинхронно, и ваша задержка будет меньше. Ваш сервис WCF также будет менее загружен.
Надеюсь, я разъясню свою точку зрения.