【问题标题】:Calling server side function from signalR in Android从 Android 中的 signalR 调用服务器端函数
【发布时间】:2026-02-14 16:00:01
【问题描述】:

SignalR 在 Android 中连接,但我想调用服务器上可用的函数,

我尝试了以下代码,

String host = "Host URL";
    HubConnection hubConnection = new HubConnection(host, "", false, new Logger() {
        @Override
        public void log(String message, LogLevel level) {
            System.out.println("message - " + message);
        }


    });

    hubProxy = hubConnection.createHubProxy("Task");
    SignalRFuture<Void> signalRFuture = hubConnection.start().done(addSession("Session ID"));

还有

private Action<Void> addSession(String sessionID) {
    //hubProxy. [server is not available here]
}

在javascript中,我尝试如下,

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

 function addSession(sessionId) {
       proxy.server.addSession(sessionId)
            .done(function () {
                  isHubConnected = true;
             }
       );
 }

在 javascript 中这很完美,但在 android 中 :( ,

更新

通过尝试像@AnikIslamAbhi 的回答,

signalRFuture = hubConnection.start().done(addSession("sessionID"));

private Action<Void> addSession(String sessionID) {
    System.out.println("addSession : " + sessionID);
    hubProxy.invoke("addSession", sessionID);
    return null;
}

我收到以下错误消息,

InvalidStateException: The operation is not allowed in the 'Connecting' state

【问题讨论】:

    标签: javascript android signalr


    【解决方案1】:

    在 javascript 中,您使用的是自动代理。

    但是在android中你使用的是手动代理

    两者的行为不同。

    喜欢

    使用自动代理调用服务器端方法

    proxy.server.addSession(sessionId)
    

    使用手动代理调用服务器端方法

    proxy.invoke("addSession", sessionId)
    

    您可以在此link 上找到更多信息

    【讨论】:

    • 好的,我认为这会起作用,但是当我调用它时,我收到了以下错误消息。 InvalidStateException: The operation is not allowed in the 'Connecting' state。你能猜到,这里有什么问题吗?
    • hubProxy.invoke("addSession", sessionID).done(new Action() { @Override public void run(Void obj) throws Exception { System.out.println("SENT! "); } }) 添加这个然后告诉我会发生什么
    • // 订阅连接事件 hubConnection .connected(new Runnable() { @Override public void run() { System.out.println("CONNECTED"); } });检查连接是否成功
    • 这没有连接兄弟,也没有发送。
    • 我在那里添加了 logcat 消息。