初めて質問させていただきます。
現在、Azure上にSignalRサーバを配置して、WindowsアプリとAndroidアプリから利用しようとしています。
各種サンプルがwebにあるので、Windowsアプリ側はやりとりできるようになりました。
しかし、Androidアプリからは、1回~数回だけInvokeでSignalRサーバにメッセージが飛ぶだけで、その後は飛ばず、コールバックも呼ばれない状況です。
Androidアプリ初心者のため、根本的にAndroidからのSignalRの実装方法が誤っているのかもしれません。
試験端末はAndroid 6です。
開発環境はAndroid Studio3で、ライブラリに「gson-2.8.5.jar」と「signalr-claient-sdk.jar」を追加しています。
少なからずともアドバイスいただけたら幸甚です。
初めての質問でぶしつけなところがありましたらご容赦ください。
少し抽象的で申し訳ありませんが、以下のような実装をしています。
Andridアプリの実装
private HubConnection hubConnection; private HubProxy proxy; SignalRFuture<Void> awaitConnection; @Override protected void onCreate(Bundle savedInstanceState) { hubConnection = new HubConnection("https://xxxxxxxxxx.azurewebsites.net/"); proxy = hubConnection.createHubProxy("MyHub1"); //proxy.subscribe(MainActivity.this); // ハブらからの呼び出し(コールバックの登録) ←このコールバックが呼ばれない proxy.on("addNewMessageToPage", new SubscriptionHandler2<String, byte[]>() { @Override public void run(final String name, final byte[] data) { // 受け取ったデータの処理 } }, String.class, byte[].class); awaitConnection = hubConnection.start(); try{ awaitConnection.get(); }catch(Exception e){ e.printStackTrace(); return; } } あるメソッド(){ リスナ(new リスナ() { // フレームごとの処理 @Override public void コールバックメソッド(myName, Buffer) { try{ // クライアントからハブのメソッド呼び出し proxy.invoke("Send", myName, Buffer); ↑数回はSignalRサーバに届く } catch (Exception e) { e.printStackTrace(); } } }); }
SignalRサーバの実装
Startup1.cs
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(WebApplication2.Controllers.Startup1))] namespace WebApplication2.Controllers { public class Startup1 { public void Configuration(IAppBuilder app) { // アプリケーションの構成方法の詳細については、https://go.microsoft.com/fwlink/?LinkID=316888 を参照してください app.MapSignalR(); } } }
MyHub1.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; namespace WebApplication2.Controllers { [HubName("MyHub1")] public class MyHub1 : Hub { public void Send(string name, byte[] data) { //Clients.Caller.addNewMessageToPage(name, data); IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub1>(); hubContext.Clients.All.addNewMessageToPage(name, data); } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。