在过去的几天里,我一直在尝试将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 Controller:
$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());
});
这是尝试从服务器通知客户端的Controller
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上点击“sendmessage”按钮时,它会向服务器发送一条消息,然后由客户端再次接收,这100%正常工作,
然而,当我从Controller调用静态Notify方法时,没有客户端收到任何消息。
调用该函数不会返回任何错误。
请有人帮助我!
答案 0 :(得分:0)
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
检查你的jQuery.signalR版本。
答案 1 :(得分:0)
如果您使用依赖注入,ASP.NET的示例是错误的,您必须在Global.asax文件中设置GlobalHost.DependendcyResolver。不在创业班。