ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何使用ASP.NET Hosting在Nancy中使用SignalR将服务器与客户端进行通信?

2019-07-04 03:54:55  阅读:212  来源: 互联网

标签:c signalr nancy


我在SignalR中找到的大多数示例都假设是ASP.NET(MVC或不是MVC).我正在使用NancyFX.我只有一个问题,所以我希望有一些我忽略的东西,或者我需要在Nancy做的一些事情,以弥补不是ASP.NET.

我的一个目标是能够在服务器事件发生时通知客户端浏览器.我不打算用hub方法替换我的Nancy路由.但我希望能够从我的路线(动作)调用浏览器.

我在SignalR Wiki中按照示例创建了非常简单的Hub.我甚至不确定是否需要它,因为我不打算将客户端调用到服务器.

public interface IUserNotifier
{
    void Start();
    void Notify(object @event);
}

我使用了一个接口,希望以后可以注入同一个集线器,以便在我的南希路线中使用…我不确定它是否在卡片中.

[HubName("userNotifier")]
public class UserNotifier : Hub, IUserNotifier
{        
    public void Start()
    {
        Notify(new {Status = "Started"});
    }

    public void Notify(object @event)
    {
        Clients.notification(@event);
    }
}

当我在我的html文件中有以下代码时,我可以看到它执行Start()方法,然后是Notify()方法,将内容传递给我的客户端.

var communicator = $.connection.userNotifier;

$.extend(communicator, {
    Notification: function(event) {
        alert("notification received from server!");
        console.log(event);
    }
});

$.connection.hub.start()
    .done(function() {
        communicator.start();
});

就像我说的那样,“启动”集线器工作并向客户端发送通知.很酷.但是,那时,我的主要目标还没有完成.我需要从代码中的其他位置发起这些通知,这些通知可能与“请求”没有直接关联.

我尝试在我的nancy模块中注入我的IUserNotifier以用于路由,但是当Notify()被触发时,我得到:

这是因为Hub基类上的Clients属性为null(尚未初始化).所以,我换了档.我尝试按照多个示例进行操作,包括wiki page about hubs中“从集线器外部广播集线器”一节中的示例:

public class NotifierModule : NancyModule
{
    public NotifierModule(){

        Get["/notify/{message}"] = p => { 
            var context = GlobalHost.ConnectionManager.GetHubContext<UserNotifier>();
            context.Clients.notification(new { Message = p.message });
        };
    }
}

我的Nancy路线执行时没有抛出错误.除了我的浏览器从未收到消息.如果我在路由中设置断点,我可以看到Clients已初始化.也许客户端集合已初始化但为空.谁知道?也许你这样做.

标签:c,signalr,nancy
来源: https://codeday.me/bug/20190704/1373300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有