SignalR android 客户端不能有两个以上的 AddMessage 订阅

SignalR android client can not have more than two AddMessage subscriptions

我正在尝试在桌面(C# - WinForms)和 Android 之间使用 SignalR 创建一个聊天应用程序。

我的 Hub 中有两种方法:

    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }

    public void SendAnswer(string from, string requestWas, string answer)
    {
        Clients.All.addMessage(from, requestWas, answer);
    }

在我的 android 应用程序客户端中,我通过单击按钮连接到服务器,然后在按钮单击处理程序中定义了这两个 AddMessage 订阅:

mProxy.on("AddMessage", new SubscriptionHandler2<String, String>() {
    @Override
    public void run(final String p1, final String p2) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mTvContent.append(p1 + ":\t" + p2);
            }
        });
    }
}, String.class, String.class);

mProxy.on("AddMessage", new SubscriptionHandler3<String, String, String>() {
    @Override
    public void run(final String p1, final String p2, final String p3) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mTvContent.append("-- " + p1 + " --\t" + p2 + ":\t" + p3);
            }
        });
    }
}, String.class, String.class, String.class);

如果我使用 HUB 的 Send 方法,它工作正常(请注意它有 2 个参数,因此 android 代码中的第一个 AddMessage 订阅。例如:

mProxy.invoke("Send", new String[]{"MobileClient", "Connected"});

工作正常,现在如果我对集线器的 SendRequest 执行某些操作,它不会在 android 客户端(订阅 3 个字符串的客户端)上打印任何内容。例如:

mProxy.invoke("SendRequest", new String[]{ComConstants.MOBILE_CLIENT,
        ComConstants.LOCAL_CLIENT,
        ReqConstants.NEW_REQ});

但是如果我删除带有 2 个字符串的订阅,带有 3 个字符串的订阅就可以正常工作并将 SendAnswer 结果打印到 android 文本框。

我的意思是,为什么 SubscriptionHandler2SubscriptionHandler3 不能同时工作?如果我注释掉 SubscriptionHandler2,那么 SubscriptionHandler3 就可以正常工作。

有线索吗?也许我在这里做错了什么?

好的....我想我应该学习更多关于动态和反射的知识....

我所要做的就是对我的 C# 集线器进行以下更改:

    public void SendAnswer(string from, string requestWas, string answer)
    {
        Clients.All.sendAnswer(from, requestWas, answer);
    }

请注意 addMessage 现在更改为 sendAnswer !