2016-10-20 5 views
0

я использую MVC 5 и у меня есть мой хаб класс как это:signalR веб-страницу обновления клиента новыми элементами

public class EventHub : Hub 
{ 
    public void broadcastEvent(string userId = "", 
           string source = "", 
           string application = "", 
           string type = "", 
           string importance = "", 
           string message = "", 
           string timeStamp = "", 
           string stackTrace = "", 
           string exceptionMessage = "", 
           string innerExceptionMessage = "", 
           string objectContext = "", 
           string serverName = "", 
           string actionResult = "") 
    { 
     Clients.All.broadcastEvent(userId, source, application, type, importance, message, timeStamp, stackTrace, exceptionMessage, innerExceptionMessage, objectContext, serverName); 
    } 
} 

и у меня есть этот код в моем веб-странице:

$(function() { 
    var app = $.connection.eventHub; 
    app.client.broadcastEvent = function (userId, 
           source, 
           application, 
           type, 
           importance, 
           message, 
           timeStamp, 
           stackTrace, 
           exceptionMessage, 
           innerExceptionMessage, 
           objectContext, 
           serverName, 
           actionResult) { 
     // Html encode display name and message. 
     var encodedName = $('<div />').text(name).html(); 
     var encodedMsg = $('<div />').text(message).html(); 
     // Add the message to the page. 
     $('.row').append("div>asfdasdf</div>"); 
    }; 

    $.connection.hub.start().done(function() { 
    }); 
}); 

И я также добавил MapHub в Startup моего проекта. Мой вопрос:

На стороне сервера я хочу обновить веб-страницу сразу после создания нового события. Как я могу инициировать широковещательный метод по требованию? Я не могу просто создать экземпляр концентратора и вызвать метод.

+1

Вы можете использовать это: 'контекст уага = GlobalHost.ConnectionManager.GetHubContext (); context.Clients.All.broadcastEvent (....) '? В качестве дополнительной заметки вам следует подумать о создании класса, содержащего свойства для значений, которые вы хотите отправить, вместо создания функции с 13 параметрами. – Pawel

+0

Спасибо, Паэль, он работает как чудо! .. пожалуйста, оставьте свой комментарий в качестве ответа. Кстати, причиной всех этих параметров является то, что я не был уверен, как сериализовать мой класс для клиента. Не знаете, как это пройти. Можете ли вы дать мне больше информации об этом? – Pouyan

+0

Просто создайте класс и передайте экземпляр. Он будет превращен в JSon, и вы получите объект с другой стороны. – Pawel

ответ

1

Вы можете получить доступ к контексту ступицы через GlobalHost, например:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.All.broadcastEvent(...) 
+0

Возможно ли передавать данные из базы данных SQL Server через SignalR при любой вставке или изменении в таблицах? Мне нужно показать обновление в реальном времени из базы данных. На данный момент я использую метод setInterval для опроса данных из базы данных. – RGS

+1

Я предполагаю, что вы используете SqlDependency для уведомления об изменениях в db (http://stackoverflow.com/questions/15225147/watch-for-a-table-new-records-in-sql-database), а затем используйте приведенное выше для вызова метода хаба. – Pawel

+0

Является ли хорошей практикой предоставление сервисного брокера в SQL Server? есть ли какие-либо деградации производительности на SQL-сервере? – RGS