Я делаю доказательство концепции SignalR. В основном я следил за учебником с этого сайта: https://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr, и я пытаюсь отправить сообщения в интерфейс из WebApi в другом проекте.SignalR в сочетании с WebApi
Javascript код, как следует:
$(function() {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
console.log("stuff");
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function() {
$('#sendmessage').click(function() {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
Код для моего хаб:
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
}
Когда я построить этот код работает так же, как, например, в приведенной выше ссылке. Однако, когда я пытаюсь отправить сообщения из другого проекта с помощью следующего кода, он не будет работать:
public class MyMessageHandler : IHandleMessages<MyMessage>
{
static ILog log = LogManager.GetLogger<MyMessageHandler>();
public Task Handle(MyMessage message, IMessageHandlerContext context)
{
log.Info($"Message received: {message.Name}");
var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
hub.Clients.All.Send("Admin", "stop the chat");
return Task.Delay(0);
}
}
Когда я запускаю этот код внешнего интерфейса запущенного на этой ссылке/порт: http://localhost:8854/index.html и WebAPI по этой ссылке/port: http://localhost:8387/api/values
Я чувствую, что мне не хватает одной последней вещи, но многочисленные результаты Google не могли мне помочь. Кто-нибудь знает, как я могу это исправить?
IHandleMessages - концепция nservicebus? Итак, второй мир кода, расположенный в * том же приложении приложения, что ваш концентратор? Если вы хотите, чтобы 'ChatHub' был доступен в нескольких экземплярах приложения, вы должны использовать объединительную плату signalr. –
@IgorLizunov IHandleMessages - действительно концепция NServiceBus. Первые два блока кода находятся на одном экземпляре приложения, а последний блок кода - на другом экземпляре приложения. Вы имеете в виду это с объединительной панелью signalr? https://www.asp.net/signalr/overview/performance/scaleout-in-signalr – pmulders