2015-01-06 3 views
3

У меня есть настольное приложение asp.net C#, которое каждые 5 минут постоянно проверяет данные базы данных. Это приводит к большому количеству нагрузки на сервер, что, в свою очередь, снижает его эффективность.Альтернативы для голосования?

Есть ли какая-либо технология в asp.net, которая поддерживает публикацию модели подписки независимо от используемой базы данных? Я знаю, что длительный опрос - одна из альтернатив. Но я искал что-то, что обусловлено событиями, а не долгим опросом данных. Любая помощь будет оценена по достоинству.

+0

Да. приложение на рабочем столе. Он не включает браузер. –

+1

Вы можете использовать технологии обмена сообщениями для предоставления функций публикации/подписки. Что-то вроде ActiveMQ, MSMQ или если вы действительно богаты, Solace. – kha

+0

В asp.net нет встроенной технологии для этого - не уверен, что вы подразумеваете под настольным приложением asp.net. Вы имеете в виду, что вы используете веб-службы или службу WCF? – Rikalous

ответ

1

Я думаю, что вы ищете что-то вроде реактивных расширений.

http://msdn.microsoft.com/en-gb/data/gg577610.aspx

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

+0

Это выглядит многообещающим ..но не мог увидеть большую часть документации .. Любые ссылки в этом направлении? –

+0

http://blogs.msdn.com/b/rxteam/archive/2013/12/13/rxjs-2-2-released.aspx Также ознакомьтесь с ответами SignalR и Messaging. Все они действительны для описываемого вами сценария. –

+0

Спасибо! В случае SignalR, Так как у меня есть настольное приложение, оно использует технику длинного опроса вправо? –

2

Если вы действительно используете ASP.net, вы можете добавить the SignalR framework, чтобы установить push-канал для вашего настольного приложения.

На стороне сервера добавьте пакет nu. Com Microsoft.AspNet.SignalR (Install-Package Microsoft.AspNet.SignalR); на клиенте добавьте Microsoft.AspNet.SignalR.Client (Install-Package Microsoft.AspNet.SignalR.Client).

Таким образом, вы можете уведомить всех своих клиентов каждый раз, когда обновление базы данных было сделано, как это:

public void AddCustomer(Customer customer) 
{ 
    using (var db = new CustomerContext) 
    { 
     db.Customers.Add(customer); 
     db.SaveChanges(); 
    } 

    var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
    hub(customer.Id); 
} 
+0

ok .. У меня больше нет клиентов. Просто одно приложение desktp .. и сервер базы данных. У него есть много Dbs для ссылки. Как и Oracle, Aspen tech так далее. Так что конкретные комментарии, пожалуйста. –

+0

Можете ли вы рассказать нам, как это приложение ASP.net? Я не понимаю, как здесь работает ASP.net. Если это автономное настольное приложение, мой ответ не применяется. – Frank

+0

Передняя часть - приложение asp.net C#. Но данные опроса поступают от нескольких разных БД. –

0

Ну, как правило, вы можете сделать это с помощью любой службы обмена сообщениями.

После .net службы обмена сообщениями приходят в виду:

+0

Все эти сервисы используют длительный опрос как запасной справа? Помимо долгого опроса есть ли другая альтернатива настольному приложению? –

+0

@BadarinathKatti Если вы используете Oracle, вы можете создавать триггеры, которые выполняются, когда что-то CRUD (вставлено, прочитано, обновлено, удалено). В случае TSQL вы можете создавать процедуры, которые в дополнение к их заданию выполняют push. Однако это не зависит от базы данных. – Margus

+0

Я не понимаю. Если есть триггеры, как узнает мое приложение переднего конца? есть ли способ, которым мое приложение asp.net знает, срабатывает ли какой-либо триггер? Более того, я ищу конкретное значение, вставленное ... так что CRUD не покрывается этим. –

0

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

Вместо того чтобы тянуть наборы данных каждые 5 минут, добавьте в свою базу данных таблицу с одним полем даты и времени. Затем создайте триггеры в таблицах, которые вы хотите контролировать (при добавлении/редактировании/удалении/независимо). Имейте это в виду, когда запускается триггер, он обновляет дату и время в созданной вами таблице.

Измените приложение на рабочем столе, чтобы вытаскивать только это значение datetime каждые 5 минут, сохраняйте значение кэширования где-то и сравнивайте его по каждому опросу, если время жизни изменяется; ваше настольное приложение может затем выполнить требуемое обновление данных.

+0

Привет .. У меня есть несколько сотен БД. Мне нужно опросить каждого из них. Его не на CRUD. Я опросу за конкретное значение столбца. Если значение этого столбца - это то, что я ищу, только тогда я хочу действие. –

Смежные вопросы