. Это довольно просто:
Вот рабочая версия вашего кода:
(async function(){
var response = await superagent.get('...')
console.log(response)
})()
ожидание поддерживается во всех текущих браузерах и узлах 8 [/ д2]
2018 February, Краткое и простое решение
Для решения этого я обычно проектирую свои хабы следующим образом:
public class NewsFeedHub : Hub
{
private static IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<NewsFeedHub>();
// Call this from JS: hub.client.send(channel, content)
public void Send(string channel, string content)
{
Clients.Group(channel).addMessage(content);
}
// Call this from C#: NewsFeedHub.Static_Send(channel, content)
public static void Static_Send(string channel, string content)
{
hubContext.Clients.Group(channel).addMessage(content);
}
}
Так что легко вызвать из Javascript и обратно -end код. Эти два метода приводят к тому же событию на клиенте.
После ответа от DDan вы можете создать перегруженный статический метод и сохранить общую логику одним способом - я использую этот шаблон
public class ChatHub : Hub
{
private static IHubConnectionContext<dynamic> GetClients(ChatHub chatHub)
{
if (chatHub == null)
return GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients;
else
return chatHub.Clients;
}
// Call from JavaScript
public void Send(string message)
{
Send(message, this);
}
// Call from C# eg: Hubs.ChatHub.Send(message, null);
public static void Send(string message, ChatHub chatHub)
{
IHubConnectionContext<dynamic> clients = GetClients(chatHub);
// common logic goes here
clients.All.receiveSend(message);
}
}
. Затем с вашего контроллера вы можете использовать
Hubs.ChatHub.Send(arg1, null);
обновлено: Этот ответ тоже старый! По-видимому, публичный API SignalR находится в постоянном потоке. Тим Б Джеймс имеет новое, правильное использование API по состоянию на июль 2012 года.
В настоящее время принятый ответ от Майка устарел и больше не работает с последней версией SignalR.
Вот обновленная версия, которая показывает, как отправить сообщение в концентратор из действия контроллера MVC:
public ActionResult MyControllerMethod()
{
// Important: .Resolve is an extension method inside SignalR.Infrastructure namespace.
var connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
var clients = connectionManager.GetClients<MyHub>();
// Broadcast to all clients.
clients.MethodOnTheJavascript("Good news!");
// Broadcast only to clients in a group.
clients["someGroupName"].MethodOnTheJavascript("Hello, some group!");
// Broadcast only to a particular client.
clients["someConnectionId"].MethodOnTheJavascript("Hello, particular client!");
}