SignalR获取集线器之外的客户端不起作用 - javascript

我正在尝试从控制器调用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();
});

在控制器中它不会引发错误。当我调试和暂停它时,集线器对象存在,但是当我执行它时,它不向前端发送任何消息。如果我从中心调用相同的方法-会很吸引人。
任何想法,什么可能是问题的根本原因?如果需要-在评论中写我将提供更多信息。

参考方案

服务器

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();
            }
        }
    }

关于此内容,请参见link

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

JavaScript中的字符串评估函数 - javascript

            JavaScript中是否有任何内置函数,例如Python中的eval内置函数?注意:eval函数将方程式作为字符串并返回结果。例如,假设变量x为2,则eval("2x+5")返回9。 参考方案 是的,JavaScript中也有eval函数。此外,该声明应有效用于评估,即eval("2*x+5"…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…

使用C#执行JavaScript页面 - javascript

我正在尝试使用C#抓取一个网站。在此过程中的某个时候,网站返回了我需要执行的JavaScript页面,以便它将生成一些参数,然后使用所生成的参数作为查询变量来发布请求。这是JavaScript文件https://jsfiddle.net/7aw5vr59/浏览器生成的结果文件如下所示:<imimxxxyyy id="ActiveX"…