Нужен совет для запроса данных с сервера sql каждые 5 секунд и отправки их в другое приложение. (. NET C #) - PullRequest
1 голос
/ 11 июня 2009

У меня есть требование читать данные из таблицы (SQL 2005) и отправлять эти данные в другое приложение каждые 5 секунд. Я ищу лучший способ сделать то же самое.

Сейчас я планирую написать консольное приложение (.NET и C #), которое будет считывать данные из sql server 2005 (таблица QUEUE, которая будет заполняться через разные приложения) и отправлять в другое приложение через TCP / IP (центральное сервер). Запускайте это консольное приложение по расписанию каждые 5 секунд. Я предполагаю, что запланированная задача позаботится об отмене нового события запуска, если задача уже запущена (избегайте одновременного выполнения).

Кто-нибудь сталкивается с подобной ситуацией? Пожалуйста, поделитесь своим опытом и посоветуйте мне лучший подход.

Заранее благодарим за ваше драгоценное время, потраченное на мою просьбу.

-POR-hills-

Ответы [ 6 ]

3 голосов
/ 11 июня 2009

Мы проделали симлярную работу. Если вы собираетесь запрашивать базу данных sql каждые 5 секунд, обязательно используйте хранимую процедуру, оптимизированную для очень быстрой работы. Он не должен обновлять данные без крайней необходимости. Этот подход обычно называется «опросом», и я обнаружил, что он приемлем, если ваш sqlserver иначе не увязнет в слишком большом количестве других вызовов.

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

Чтобы сообщить результаты другому приложению, все зависит от того, что делает другое приложение, и какой интерфейс вы можете в него встроить, и как быстро вам нужны результаты. Библиотеки классов WCF от Microsoft предоставляют множество реальных подходов для общения в реальном времени. Я предпочитаю писать в базу данных приложений, а затем делать, чтобы приложение считывало данные (если это работает для этого приложения). Если вам нужно что-то в режиме реального времени, WCF - это путь, и я бы предложил использовать протокол без сохранения состояния, такой как http, если требуется время отклика <5 секунд, (с использованием стандартных сообщений HTTP), или TCP / IP, если время отклика составляет менее секунды требуется. </p>

1 голос
/ 11 июня 2009

, поскольку я предполагаю, что ваше центральное хранилище - это также SQL 2005, рассматривали ли вы возможность использования SQL Server 2005 "из коробки" для удовлетворения ваших требований? Вместо пула каждые 5 секунд выполняется маршал и демаршал TCP / IP, реализация аутентификации и авторизации для канала TCP / IP, масштабирование передачи TCP с помощью boxcaring, управление подтверждениями и повторными сообщениями, работа с доступностью центрального сайта, фрагментация больших сообщений, реализация справедливости в передача и так далее, и так далее, почему бы просто не использовать Service Broker ? Он делает все, что вам нужно, и даже больше, из коробки, уже протестировано, уже настроено на производительность и масштабируемость.

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

0 голосов
/ 11 июня 2009

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

0 голосов
/ 11 июня 2009

Я предлагаю создать службу Windows, а не приложение, и выполнить синхронизацию самостоятельно - создать таймер и выполнить один шаг для каждого события таймера. Для общения у вас есть много вариантов - я бы рассмотрел использование стандартных технологий, таких как веб-сервис или Winows Communication Foundation.

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

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

0 голосов
/ 11 июня 2009

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

0 голосов
/ 11 июня 2009

Я бы порекомендовал написать службу Windows (поскольку вы C #), у которой есть таймер, который запускается каждые 5 секунд. Таким образом, вы не будете запускать и останавливать приложение все время, оно может работать, даже когда никто не вошел в систему, и автоматически запустится, когда машина будет перезапущена.

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