Я пытаюсь загрузить веб-API с MVC 5 и SignalR для обновлений из базы данных. Я тестировал свой код в автономном режиме с локальной базой данных и веб-сайтом localhost. Это работает идеально, как и ожидалось.
Но когда я удаляю код SqlDependency
в своей функции веб-API GET
, он получает все элементы из базы данных. Но как только я добавлю SqlDependency
, это больше не будет работать. Чтобы увидеть, есть ли какие-либо ошибки с концентратором, я добавил этот код $.connection.hub.logging = true;
Я использую его, поэтому, когда я нажимаю F12, я могу видеть журналы. В этом журнале все работает нормально с включенным SqlDependency
и без него, никаких ошибок не обнаруживается. Поэтому я не уверен, что не так с получением информации из базы данных с помощью SqlDependency
.
Это код, который я использовал для веб-API:
[HttpGet]
public IEnumerable<TeamManager.Team> GetAllTeams()
{
List<TeamManager.Team> Teamlist = new List<TeamManager.Team>();
SqlDependency.Stop(ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString);
SqlDependency.Start(ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString);
SqlDataReader reader = null;
using (var cn = new SqlConnection(ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString))
{
using (var cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT [TeamID], [Teamnaam], [AantalPersonen],[Eindtijd], [Datum] FROM [Escapehaarlem].[Team]";
cmd.Notification = null;
SqlDependency dep = new SqlDependency(cmd);
dep.OnChange += Dep_OnChange;
cn.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Teamlist.Add(new TeamManager.Team()
{
TeamID = Convert.ToInt32(reader.GetValue(0)),
Teamnaam = reader.GetValue(1).ToString(),
AantalPersonen = Convert.ToByte(reader.GetValue(2)),
Eindtijd = reader.GetValue(3).ToString(),
Datum = Convert.ToDateTime(reader.GetValue(4)),
});
}
}
reader.Close();
}
}
return Teamlist;
}
private void Dep_OnChange(object sender, SqlNotificationEventArgs e)
{
LeaderboardHub.Show();
}
}
Это мой хаб шоу выглядит так:
public static void Show()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<LeaderboardHub>();
context.Clients.All.displayLeaderBoard();
}
Запуск:
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
app.MapSignalR();
}
И это код, который я использую для Index.cs html:
<div id="body">
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>Leader Board</h1>
</hgroup>
</div>
</section>
<section class="content-wrapper main-content clear-fix">
<h1>
<span>
Top Challengers
@*<img src="Images/goals_256.png" style="width:40px; height:60px;" />*@
</span>
</h1>
<table id="tblRank" class="table table-striped table-condensed table-hover"></table>
</section>
</div>
@section scripts{
@Scripts.Render("~/Scripts/jquery.signalR-2.4.1.min.js")
@Scripts.Render("~/signalr/hubs")
<script type="text/javascript">
$(function () {
var rank = $.connection.leaderboardHub;
rank.client.displayLeaderBoard = function () {
LoadResult();
};
$.connection.hub.logging = true;
$.connection.hub.start();
LoadResult();
});
function LoadResult() {
var $tbl = $("#tblRank");
$.ajax({
url: 'https://escapehaarlemhighscore.nl/api/game/GetAllteams',
type: 'GET',
datatype: 'json',
success: function (data) {
if (data.length > 0) {
$tbl.empty();
$tbl.append('<thead><tr><th>Rank</th><th></th><th></th><th>Best</th><th>Achieved</th></tr></thead>');
var rows = [];
for (var i = 0; i < data.length; i++) {
rows.push('<tbody><tr><td>' + (i + 1).toString() + '</td><td>' + data[i].Teamnaam + '</td><td>' + data[i].AantalPersonen + '</td><td>' + data[i].Eindtijd + '</td><td>' + data[i].Datum + '</td></tr></tbody>');
}
$tbl.append(rows.join(''));
}
}
});
}
</script>
}
Надеюсь, кто-нибудь сможет объяснить мне, почему это работает без использования SqlDependency
и почему не работает с SqlDependency
.
Заранее спасибо