質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.04%

  • Windows

    1214questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • ASP.NET

    439questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

SignalRでのクライアントとWEBアプリの連携

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 117

tmht32884

score 1

前提・実現したいこと

簡略化しますが、以下のような流れを実現したいと考えています
①webアプリ(以下W)のクリックがトリガ(完了待ち開始)
②クライアントアプリ(以下C)にWで表示していたIDなどを通知
③CでIDを元に数秒の処理
④Cの処理完了をWに通知
⑤Wの後続処理
⑥Wの完了待ち終了

WとCが1:1になったりで、本来の使い方ではないような気がしていますが
これをSignalRで実装を試みています(環境は下記の通りです)

補足情報(言語/FW/ツール等のバージョンなど)

.Net 4.5
WindowsForm,ASP.NET MVC
SignalR 2.2.2

該当のソースコード

SignalRの初期設定は割愛しますが、NuGetからインストールしてStartupに追加したくらいです

クライアント側

// Load
var conn = new HubConnection("http://host/test");
var proxy = conn.CreateHubProxy("SendHub");
proxy.On<string>("sendId", (id) => {
  // クライアントの処理
});
conn.Start().Wait();
proxy.Invoke("Connect"); // IPをグループとして登録している(つもり)

WEBアプリ側

// クリック時アクション
public ActionResult AsyncSendId(string uid) {
  // クライアント特定のためIPを取得
  var ip = Request.UserHostAddress;
  // 通知
  var context = GlobalHost.ConnectionManager.GetHubContext<SendHub>();
  context.Clients.Group(ip).sendId(uid);
  // 本来ここで待ちに突入
  // 後続処理
  return View();
}

// HUbクラス
public class SendHub : Hub
{
  public void Connect() {
    var ip = HttpContext.Current.Request.UserHostAddress;
    Groups.Add(Context.ConnectionId, ip);
  }
}

聞きたいこと

クライアントの完了通知を、Hubクラスを通じて?どのようにWEBアプリ側で待ち状態にすればいいのか
そもそもアプローチが間違ってないか・・アドバイスをいただけないでしょうか
よろしくお願いします

解決策案

SignalR(以下S)の部分を分離して
W(トリガ&完了通知待ち) → S(トリガのキー受取&保持) → C(処理要求) → S(完了通知受取) → W(完了通知受取)
途中経過が不安だけど、こんな感じの流れでいけないかなと

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Windows

    1214questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • ASP.NET

    439questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。