SignalR使集线器外的客户端无法工作
SignalR Get Clients outside of Hub not working
我正试图从控制器调用signalR,但它不起作用。
控制器:
public ActionResult Index(){
var hub = GlobalHost.ConnectionManager.GetHubContext<ClientControl>();
hub.Clients.All.sendMessage("ahahhaaa");
//... return and staff
}
集线器
[Authorize]
[HubName("userTracking")]
public class ClientControl : Hub
{
public void RegisterConnection(String controller, String action)
{
}
public override Task OnConnected()
{
}
public override Task OnDisconnected()
{
return base.OnDisconnected();
}
}
前端:
$(document).ready(function () {
var trackhub = $.connection.userTracking;
trackhub.client.sendMessage = function (msg) {
alert(msg);
}
$.connection.hub.logging = true;
$.connection.hub.start();
});
在控制器中,它不会抛出错误。当我调试并暂停它时,hub对象存在,但当我执行它时,它不会向前端发送消息。如果我从hub调用相同的方法,那么它就是一个魅力。你知道问题的根本原因是什么吗?如果需要-写在评论中,我会提供更多信息。
服务器
public class ChatHub : Hub
{
public int TryAddNewUser(string userName)
{
//some logic...
Clients.All.AddUserToUserList(id, userName);
return id;
}
public void AddNewMessageToPage(int id, string message)
{
//some logic...
Clients.All.addNewMessageToPage(u.Login, message);
}
}
客户端
$(document).ready(function () {
//first need register client methods
var chat = $.connection.chatHub;
chat.client.addUserToUserList = function (id, login) {
//client logic for add new user
}
chat.client.addNewMessageToPage = function (login, message) {
//client logic for add new message from user
}
//second need start chat
$.connection.hub.start().done(function () {
chat.server.tryAddNewUser(login).done(function (id) {
alert("Added " + id)
});
});
});
控制器
public class ChatController : Controller
{
private IMyDataService _service;
public ChatController(IMyDataService s)
{
_service = s;
}
public ActionResult Index()
{
return View(new MyDataViewModel(_service));
}
}
注意,动态js文件必须使用相同的路径添加
<script type="text/javascript" src="~/signalr/hubs"></script>
我将以下代码添加到Startup.cs
using Owin;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(ChatRoom.Startup))]
namespace ChatRoom
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
关于此,请参阅链接
请将控制器中的集线器名称更改为工作
使用
var hub = GlobalHost.ConnectionManager.GetHubContext<UserTracking>();
hub.Clients.All.sendMessage("ahahhaaa");
代替
var hub = GlobalHost.ConnectionManager.GetHubContext<ClientControl>();
hub.Clients.All.sendMessage("ahahhaaa");
请注意GetHubContext<>中集线器类名的更改。
希望这能有所帮助。
相关文章:
- Imgur 通过客户端 javascript 上传工作,但不是 node.js.慌乱了
- ASPxClientGridView之后激发的客户端事件.ApplyFilter执行其工作
- Backbone.js应用程序使用CommonJS结构与node.js和客户端协同工作
- socket.io-发送到socketid(单个客户端)不工作
- SignalR使集线器外的客户端无法工作
- Java 脚本 Web 套接字客户端无法正常工作
- Rx如何在Web(客户端)上真正工作
- JavaScript 的客户端缓存是如何工作的
- Asp.net.服务器端验证和客户端验证很好地协同工作的最佳方式是什么?
- 我的节点.js https 客户端始终工作,无论证书有效性如何
- struts2 jquery ajax 和客户端验证不工作
- 可以't使nntp客户端(nodejs)正常工作
- 自定义验证摘要HTML帮助程序没有'不在客户端工作
- 让Pusher JS客户端在PhantomJS中工作
- XML读取代码在我的服务器上工作,但在我的客户端服务器上不工作
- Valence javascript客户端库在本地主机上工作吗
- TLS WebSocket服务器与firefox客户端一起工作,但不与chrome客户端一起工作
- GridView客户端分页不工作
- Timer中的客户端脚本不工作
- 是 angularjs 工作客户端