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中,您正在使用手动代理

两者在行为上都有差异。

喜欢

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

proxy.server.addSession(sessionId)


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

proxy.invoke("addSession", sessionId)


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

关于javascript - 在Android中从signalR调用服务器端函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29405168/

10-10 09:16