Я создаю приложение ASP.NET MVC, которое использует технологии "SqlDependecy" и "SignalR" для поддержания связи с сервером в режиме реального времени на основе изменений базы данных. Он просто проверяет изменения значения поля в конкретной записи базы данных и затем отображает его в браузере.
Попытка работает отлично. Но когда я отслеживаю сетевые запросы через производительность браузера "Сеть", количество запросов увеличивается на 1 при каждом обновлении страницы.
Asна изображении.
- При начальной загрузке страницы выполняется только один запрос.
- Первое обновление после начальной загрузки, а затем изменение базы данных приведет к выполнению 2 запросов.
- Второе обновление после начальной загрузки, а затем изменение базы данных приведет к выполнению 3 запросов.
и т. Д. *
Код js, который я пробовал, приведен ниже.
Это кажется мне проблемой. Если это реальная проблема, любые советы по этому вопросу будут высоко оценены. Большое спасибо.
<script type="text/javascript">
$(function () {
var jHub = $.connection.journeyHub;
$.connection.hub.start();
jHub.client.ListenChange = function () {
getData();
}
jHub.client.ListenChange();
});
function getData() {
$.ajax({
url: 'GetValue',
type: 'GET',
dataType: 'json',
success: function (data) {
if (data == "pending") {
$("#box").css({ "background-color": "orange" });
}
else if (data == "deny") {
$("#box").css({ "background-color": "red" });
}
else if (data == "success") {
$("#box").css({ "background-color": "green" });
}
}
});
}
</script>
<div id="box" style="width:100px; height:100px; background-color: gray;"></div>
[Edit v1] Вот мой контроллер, на котором расположен обработчик событий.
public class TravelController : Controller
{
SqlConnection link = new SqlConnection(ConfigurationManager.ConnectionStrings["linkTraveller"].ConnectionString);
// GET: Travel
public ActionResult Listen()
{
return View();
}
public ActionResult GetValue()
{
using (IDbConnection conn = link)
{
string query = @"SELECT [Status] FROM [dbo].[Journey] WHERE [Id]=1";
SqlCommand command = new SqlCommand(query, link);
SqlDependency sqlDep = new SqlDependency(command);
sqlDep.OnChange += new OnChangeEventHandler((sender, e) => sqlDep_OnChange(sender, e));
conn.Open();
string status = command.ExecuteScalar().ToString();
return Json(status, JsonRequestBehavior.AllowGet);
}
}
private void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
{
JourneyHub.Start();
}
}
Вот концентратор
public class JourneyHub : Hub
{
public static void Start()
{
var context = GlobalHost.ConnectionManager.GetHubContext<JourneyHub>();
context.Clients.All.ListenChange();
}
}