加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC 4中没有使用SignalR的服务器到客户

发布时间:2020-12-16 09:52:27 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个简单的测试应用程序来重现我在主应用程序中遇到的问题. 我有以下集线器类: [HubName("testHub")]public class TestHub : Hub{ public TestHub() { System.Diagnostics.Debug.WriteLine("TestHub instantiated"); } public void RunMe() { Syste
我创建了一个简单的测试应用程序来重现我在主应用程序中遇到的问题.

我有以下集线器类:

[HubName("testHub")]
public class TestHub : Hub
{
    public TestHub()
    {
        System.Diagnostics.Debug.WriteLine("TestHub instantiated");
    }

    public void RunMe()
    {
        System.Diagnostics.Debug.WriteLine("Client Started");
    }

    public static void Notify(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
        hubContext.Clients.All.notify("Hello!");
    }
}

我的测试网页是:

<form action="javascript: void(0)" method="post">
    <input type="button" value="Do It!" onclick="hitHub()"/>
</form>

<div id="error"></div>
<script type="text/javascript">
    var tHub;    
    $(document).ready(function () {
        tHub = $.connection.testHub;
        tHub.notify = function (msg) {
            alert(msg);
        }
        $.connection.hub.start().done(function () {
            tHub.server.runMe();
        });
    });

    function hitHub() {
        $.ajax({
            type: "POST",url: "@Url.Content("~/Hub/Test")",success: function (data,textStatus,jqXHR) {
            },error: function (data,jqXHR) {
                $("#error")[0].innerHTML = data.responseText;
                alert("Error notifying hub.");
            }
        });

    }
</script>

最后,我的HubController:

public class HubController : Controller
{
    [AcceptVerbs(HttpVerbs.Post)]
    public void Test()
    {
        TestHub.Notify("Got it!");
    }
}

在我的Application_Start中,我调用了RouteTable.Routes.MapHubs();

集线器实例化.然后,对runMe()的调用将传递给服务器.一切正常.

失败的地方是我点击“Do It!”按钮.调用hitHub()并调用我的HubController.Test()方法. TestHub.Notify(“得到它!”)执行没有任何错误,但客户端没有任何反应.

我错过了什么?

更新1:根据JcFx的回答,更改了上面的javascript,以便在调用$.connection.hub.start()之前设置tHub.notify.然而,问题仍然存在.

更新2:
小提琴手看到了什么:

更新3:当我跟踪MessageBus.Publish()调用时,我注意到主题没有订阅,所以主题永远不会被安排.我不知道我应该在什么时候检查订阅…

解决方法

您使用的语法错误:

var tHub;    
$(document).ready(function () {
    tHub = $.connection.testHub;
    tHub.client.notify = function (msg) {
        alert(msg);
    }
    $.connection.hub.start().done(function () {
        tHub.server.runMe();
    });
});

注意集线器上的.client属性以注册回调.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读