【问题标题】:Sharing SignalR hub with ASP.NET Website and a Web API Mobile Backend与 ASP.NET 网站和 Web API 移动后端共享 SignalR 集线器
【发布时间】:2015-11-24 03:17:09
【问题描述】:

我已经为基于 ASP.NET 的网站设置了 SignalR 实时通信。但是,我需要知道是否可以与处理相同服务器和数据库的单独移动后端项目共享相同的 SignalR 集线器。基本上就像通过网页和手机同时访问facebook的收件箱一样?

这将是一个 ASP.NET Web 项目和一个连接到一个集线器的移动客户端。

【问题讨论】:

    标签: asp.net web-applications asp.net-web-api signalr


    【解决方案1】:

    如果您想找到 SignalR for Android,我建议您从以下工作链接开始

    您可以参考以下示例代码(这是我在 SO 关于 SignalR for Android 的问题:SignalR for Android: how can I pass dynamic class to SubscriptionHandler1

    public <T> void startSignalR(String transport, String serverUrl, final String userName, final Class<T> tClass) {
    
        Platform.loadPlatformComponent(new AndroidPlatformComponent());
        Credentials credentials = new Credentials() {
            @Override
            public void prepareRequest(Request request) {
                request.addHeader(HEADER_KEY_USERNAME, userName);
            }
        };
    
        mConnection = new HubConnection(serverUrl);
        mConnection.setCredentials(credentials);
        mHub = mConnection.createHubProxy(SERVER_HUB_CHAT);
    
        if (transport.equals("ServerSentEvents")) {
             mTransport = new ServerSentEventsTransport(mConnection.getLogger());
        } else if (transport.equals("LongPolling")) {
             mTransport = new LongPollingTransport(mConnection.getLogger());
        }
    
        mAwaitConnection = mConnection.start(mTransport);
    
        try {
            mAwaitConnection.get();
        } catch (InterruptedException e) {      
            e.printStackTrace();      
            return;
        } catch (ExecutionException e) { 
            e.printStackTrace();
            return;
        }
    
        mHub.on("broadcastMessage",
                new SubscriptionHandler1<Object>() {
                    @Override
                    public void run(final Object msg) {
                        final String finalMsg;
                        Gson gson = new Gson();
                        Object object = gson.fromJson(msg.toString(), tClass);
                        Field[] fields = object.getClass().getDeclaredFields();
                        for (int i = 0; i < fields.length; i++) {
                            try {
                                System.out.println("Value = " + fields[i].get(object));                                
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }                        
                    }
                }
                , Object.class);
    
        ...
    }
    

    希望这会有所帮助!

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • @WaiHaLee:感谢您的评论。我已经更新了示例代码。
    • 这个库使用 websockets 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多