【发布时间】:2015-04-02 12:53:35
【问题描述】:
在过去的几天里,我一直在尝试将 SignalR 实现到我的 AngularJS/WebAPI 应用程序中。
我已经能够成功地从客户端发送/接收消息,但是当我纯粹从服务器推送消息时,没有一个客户端收到任何消息。
我看到很多人遇到同样的问题,答案似乎总是使用我一直在实施的 GlobalHost.ConnectionManager.GetHubContext ,没有错误,但是客户端仍然没有收到任何消息。
我认为这可能是因为 WebAPI 调用是异步的,因此发生在不同的线程上,但我不能确定。请有人看看并告诉我我做错了什么。
这是我的 Hub 类:
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage
Clients.All.broadcastMessage(name, message);
}
public void RunMe()
{
System.Diagnostics.Debug.WriteLine("Client Started");
}
public static void Notify(string name, string message)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
hubContext.Clients.All.broadcastMessage(name, message);
}
}
这是 Javascript 中的 Angular 控制器:
$scope.chat = $.connection.chatHub;
$scope.chat.client.broadcastMessage = function (name, message) {
$scope.$apply(function () {
var scope = angular.element($('#discussion')).scope();
scope.chatMessage = message;
alert(message);
});
};
$.connection.hub.start()
.done(function ()
{
console.log('Now connected, connection ID=' + $.connection.hub.id);
$scope.chat.server.runMe();
})
.fail(function(){ console.log('Could not Connect!'); });
$('#sendmessage').click(function () {
$scope.chat.server.send("SERVER", $('#inputMessage').val());
});
这是试图从服务器通知客户端的控制器
public class UserController : ApiController
{
#region METHODS
[ActionName("Create")]
[HttpPost]
public HttpResponseMessage Create(JObject parameters)
{
//DYNAMIC DATA
dynamic data = parameters;
//CHECK IF CALL FAILED
if (data == null)
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Request is null");
//PERFORM REQUEST
using (var svc = new UserService())
{
//SET Parameters
String Username = data.Username;
String Password = data.Password;
//NOTIFY USERS
ChatHub.Notify("SERVER", "SERVER MESSAGE");
//CREATE Response
var response = svc.Create(Username, Password);
//RESPOND
return Request.CreateResponse(HttpStatusCode.OK, response);
}
}
}
重申一下,当在我的 UI 上单击“发送消息”按钮时,它会向服务器发送一条消息,然后客户端再次接收该消息,这 100% 有效,
但是,当我从 Controller 调用静态 Notify 方法时,没有一个客户端收到任何消息。
调用函数不会返回任何错误。
请有人帮助我!
【问题讨论】:
-
你为什么在控制器中使用 jquery?创建信号器服务包装器
-
@jack.the.ripper 感谢您的回复。你有一个使用信号器服务包装器的小例子吗?我对此很陌生,只是无法弄清楚。提前致谢。
-
很确定他在谈论角度服务;这有帮助吗:stackoverflow.com/questions/20139127/…?
-
hmm.. 其实我刚才试过了,对我有用
标签: angularjs signalr asp.net-web-api