Signalr Requests умирает - PullRequest
       3

Signalr Requests умирает

0 голосов
/ 05 января 2019

Я использую сигнализатор в своем приложении для Android, и когда я использую свои данные, а не Wi-Fi (Wi-Fi, кажется, работает нормально), запросы сигнализатора умирает через несколько минут.

Кажется, что btnRefresh отображается красным, но когда вы прокручиваете вниз к последующим сообщениям, btnRefresh всегда остается черным, даже когда они являются сообщениями.

sendMessage, похоже, срабатывает каждый раз, и связь не теряется, так как у меня там есть точки останова.

Это мой hubproxy, и когда я запускаю сигнализатор:

public class ClientChatHub extends Service {
private HubConnection mHubConnection;
private HubProxy mHubProxy;
private Handler mHandler; // to display Toast message
private final IBinder mBinder = new LocalBinder();
Button btnRefresh;
public ClientChatHub() {
}


@Override
public void onCreate() {
    super.onCreate();
    mHandler = new Handler(Looper.getMainLooper());
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    int result = super.onStartCommand(intent, flags, startId);
    startSignalR();
    return result;
}

@Override
public void onDestroy() {
    mHubConnection.stop();
    super.onDestroy();
}

@Override
public IBinder onBind(Intent intent) {
    // Return the communication channel to the service.
    startSignalR();
    return mBinder;
}

Activity act;
/**
 * Class used for the client Binder.  Because we know this service always
 * runs in the same process as its clients, we don't need to deal with IPC.
 */
public class LocalBinder extends Binder {
    public ClientChatHub getService() {
        // Return this instance of SignalRService so clients can call public methods
        return ClientChatHub.this;
    }
}

/**
 * method for clients (activities)
 */
public void sendMessage(int id, String searchThreadTitle, String searchThreadDesc, int actCatsearchVal, Button btnRefresh) {
    String SERVER_METHOD_SEND = "Send";
    this.btnRefresh = btnRefresh;
    mHubProxy.invoke(SERVER_METHOD_SEND, id, searchThreadTitle, searchThreadDesc, actCatsearchVal);
    //this.act = act;

}

private void startSignalR() {
    Platform.loadPlatformComponent(new AndroidPlatformComponent());

    Credentials credentials = new Credentials() {
        @Override
        public void prepareRequest(Request request) {
            request.addHeader("User-Name", "BNK");
        }
    };

    String serverUrl = "http://xxxx/";
    mHubConnection = new HubConnection(serverUrl);
    //mHubConnection.setCredentials(credentials);
    String SERVER_HUB_CHAT = "Notifications";
    mHubProxy = mHubConnection.createHubProxy(SERVER_HUB_CHAT);
    ClientTransport transport = new LongPollingTransport(mHubConnection.getLogger());
    SignalRFuture<Void> signalRFuture = mHubConnection.start(transport);

    try {
        signalRFuture.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
        return;
    }

    try{

        String CLIENT_METHOD_BROADAST_MESSAGE = "messageReceived";
        mHubProxy.on(CLIENT_METHOD_BROADAST_MESSAGE,
                new SubscriptionHandler1<Object>() {
                    @Override
                    public void run(final Object msg) {
                        final boolean finalMsg =  (boolean) msg;
                        // display Toast message
                        mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                    if(finalMsg){
                                        if(btnRefresh != null) {
                                            btnRefresh.setTextColor(Color.parseColor("#D32F2F"));
                                        }
                                    }else{
                                        if(btnRefresh != null) {
                                            btnRefresh.setTextColor(Color.parseColor("#000000"));
                                        }
                                    }

                            }
                        });
                    }
                }
                , Object.class);
    }catch(Exception e){

        String t = "";

    }

  }
}

Это startup.cs:

using Microsoft.Owin;
using Owin;

using Microsoft.Owin.Cors;
using Microsoft.AspNet.SignalR;

[assembly: OwinStartupAttribute(typeof(ThreadBumpApp.Startup))]

namespace xxxxx
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
             app.UseCors(CorsOptions.AllowAll);
             app.MapSignalR();
        }


    }
}

Скрипт chathub:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace xxxx.ChatHub
{
public class Notifications : Hub
{

    public void Send(int id, string searchThreadTitle, string searchThreadDesc, int actCatsearchVal)
    {
        Boolean isNewThread = false;
        if (id > 0)
        {
            isNewThread = new xxx.BAL.Data().isNewThread(id, searchThreadTitle, searchThreadDesc, actCatsearchVal);
        }

        Clients.AllExcept(Context.ConnectionId).messageReceived(isNewThread);
    }
}
}

Но HubProxy.on, кажется, перестает работать через несколько минут только на данных, а не на Wi-Fi.

Может кто-нибудь помочь мне с этой проблемой?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...