У меня есть веб-элементы управления (датчики). Я создаю динамически от 1 до x (не более 30) в зависимости от настроек задания при загрузке страницы. Код SignalR Hub находится на таймере, который срабатывает каждые 20 секунд. Таким образом, мои динамические датчики получают данные каждые 30 секунд . Я устанавливаю значение для элемента управления с помощью функции javascript клиента guage.set_vale (). Эта функция циклически повторяется каждые 30 секунд, когда запускается концентратор, и устанавливает значения.
For i As Integer = 0 To 7
Dim UserControl As WebUserControl1 = CType(Me.LoadControl("~/WebUserControl1.ascx"), WebUserControl1)
UserControl.ID = "RG" & (i) ''1_RadGauge
UserControl.ControlWidth = 9
UserControl.setTankNumber = i + 20
Me.Panel1.Controls.Add(UserControl)
Next
В настоящее время все элементы управления получают данные из одного и того же концентратора. Данные, которые передают эти элементы управления, являются базой данных SQL на стороне сервера.
SELECT top(1) * from zSignalR_DB_Test order by id desc
Таким образом, все элементы управления показывают те же данные.
Я хочу, чтобы каждый элемент управления показывал свои данные. Таким образом, каждый элемент управления будет получать свои собственные данные из базы данных
SELECT top(1) * from zSignalR_DB_Test WHERE ID = 'MyControlID' order by id desc
Я смотрел на группы SignalR, но не видел, как делать то, что я пытаюсь сделать. Таким образом, все, что мне нужно сделать, это связать controlID с данными в базе данных.
Мои вопросы:
Нужен ли отдельный SignalR Hub для каждого элемента, который я создаю динамически?
Нужно ли динамически создавать эти концентраторы?
Является ли SignalR Groups правильным способом сделать это?
Если я обновляюсь каждые 30 секунд или минуту, могу ли я просто создать метод, который отправляет идентификатор обратно клиенту, и когда я перебираю каждый элемент управления в клиенте (возможно, добавляю паузу в 1 секунду), отправляю идентификатор запустить другой оператор SQL?
Любые мысли или примеры были бы великолепны.
Дополнительный код:
<script type="text/javascript">
$(function() {
var logger = $.connection.loghub;
logger.client.logMessage = function(msg) {
var ajaxPanel = document.getElementById("Panel1");
for (var x = 0; x < ajaxPanel.children.length; x=x+2) {
if (msg <=50){
var ImageElementGreen = ajaxPanel.children[x].children[0];
ImageElementGreen.style.visibility = 'visible'
var ImageElementRed = ajaxPanel.children[x].children[1];
ImageElementRed.style.visibility = 'hidden'
} else {
var ImageElementGreen = ajaxPanel.children[x].children[0];
ImageElementGreen.style.visibility = 'hidden'
var ImageElementRed = ajaxPanel.children[x].children[1];
ImageElementRed.style.visibility = 'visible'
}
var TBValueElement = ajaxPanel.children[x].children[3].children[0];
var TBValue = $find(TBValueElement.id);
TBValue.set_value(msg + "%");
var linearGaugeElement = ajaxPanel.children[x].children[4];
var linearGauge = $find(linearGaugeElement.id);
linearGauge.set_value(msg);
}
};
$.connection.hub.start();
});
</script>