SignalR - проблема с извлечением данных из представления - PullRequest
0 голосов
/ 17 сентября 2018

Я создал 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...