Я создал Web Api с SignalR для извлечения данных из объекта базы данных в виде представления.Когда я обновлял таблицу, связанную с просмотром, данные не выбираются, а обновленные данные не отображаются на странице html.в первом решении мы создали два отдельных решения: у нас есть API и класс MyHub для вызова клиентской функции displayStatus.Во втором решении у нас есть функции html и displayStatus ().Я не могу вызвать функцию displayStatus () из класса MyHub, который находится в другом решении, т.е. 1-м решении.
Мой код: ApiController:
using SignalRMVC;
namespace SignalRWebAPI.Controllers
{
public class MyController : ApiController
{
[Route("api/GetData")]
public string GetData(string cri="")
{
var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStrSignalR"].ConnectionString);
string query = @"SELECT (*my query comes here*)";
connection.Open();
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Notification = null;
SqlDependency.Start(ConfigurationManager.ConnectionStrings["ConStrSignalR"].ConnectionString);
SqlDependency dependency = new SqlDependency(cmd);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = cmd.ExecuteReader();
var result = reader.Cast<IDataRecord>()
.Select(x => new PropertyClassName()
{
property1 = x.GetValue(0).ToString(),
property1 = x.GetValue(1).ToString(),
.
.
.
}).ToList();
string jsonResult = JsonConvert.SerializeObject(result);
return jsonResult;
}
private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
MyHubMvc.Show();
}
}
Класс Hub:
using Microsoft.AspNet.SignalR;
namespace SignalRMVC
{
public class MyHubMvc : Hub
{
public static void Show()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHubMvc>();
context.Clients.All.displayStatus();
}
}
}
Сценарий:
<script type="text/javascript">
$(function () {
$.connection.myHubMvc.client.displayStatus = function () {
getData();
};
$.connection.hub.start();
getData();
});
function getData() {
var $tbl = $('#tbl');
var crit = $('#ddlTypes').val();
$.ajax({
url: 'http://localhost:.../api/GetData',
data: { 'cri': crit },
dataType: "json",
success: function (data) {
data = JSON.parse(data);
var tbl = '<table class="w3-table-all w3-hoverable">';
tbl += '<tr><th>property1</th><th>property2</th>....<tr>';
$tbl.empty();
for (var i = 0; i < data.length; i++) {
tbl += '<tr class="w3-light-grey">';
tbl += '<td>' + data[i].property1 + '</td>';
tbl += '<td>' + data[i].property2 + '</td>';
.
.
.
tbl += '</tr>';
}
tbl += '</table>';
$tbl.html(tbl);
},
})
}
</script>