1

SignalR で多くの調査とテストを行いましたが、問題があります。

.Net MVC3 Web アプリケーションを作成しています。ユーザー インターフェイスは次のようになります。

画像を投稿することは許可されていないため、次のリンクでユーザー インターフェイスを確認できます。

http://deasign.free.fr/InterfaceVadis.jpeg

目標は次のとおりです。

  • User1 が Web アプリケーションに入り、アイテムをクリックして、編集部分ビューを表示します。
  • User2 が WebApp に入り、同じアイテムをクリックします。彼のためにビューをロックしたい。

目標 : 一度に 1 人のユーザーのみがアイテムを編集できます。

User1 が前へ/次へ/リストをクリックして編集ビューを離れると、ログアウトするか、ブラウザを閉じるだけで、User2 はすぐに (SignalR を介して) 通知を受け取る必要があり、編集ページはロックされません。

私はいくつかのことを試みましたが、達成できませんでした。

1°) SignalR Hub を宣言する必要があるのはどの部分ですか? 右側の部分ビューまたは親ページで? 私は両方を試しましたが、切断機能を思い通りに機能させることができませんでした:(

私の英語で申し訳ありません

その他の情報が必要な場合は、ご遠慮なく

ありがとうございます :)

4

1 に答える 1

0

前/次/クリックなどのすべてのユーザー操作について、アイテムのロックを解除する機能をハブで呼び出すことができます。

JS:

$("#Next").click(function(e) {
  myHub.next();
});

CS:

public class MyHub : Hub {
  public void next() {
    var itemId = ClientManager.GetCurrentEditedItemForClient(Caller.id);
    ItemManager.UnlockItem(itemId);
  }

  public void previous() {
    var itemId = ClientManager.GetCurrentEditedItemForClient(Caller.id);
    ItemManager.UnlockItem(itemId);
  }
}

クライアントが閉じて終了する場合は、IDisconnect インターフェイスを実装して、そこから切断を処理できることを知っています。

public class MyHub : Hub, IDisconnect {
    public void Disconnect()
    {
        var itemId = ClientManager.GetCurrentEditedItemForClient(Context.ClientId);
        ItemManager.UnlockItem(itemId);
    }
}

ただし、切断の実装がうまくいかなかったこともわかっています。おそらく、すべてのクライアントのステータスを定期的にチェックするルーチン、またはピンガーなどです。他の誰かがこれについてより良い考えを持っているかもしれません。

于 2012-07-02T16:32:58.687 に答える