1

我对 SignalR 进行了大量研究和测试,但我遇到了问题。

我正在创建一个 .Net MVC3 Web 应用程序。用户界面是这样的:

我不允许发布图片,因此您可以在此链接查看用户界面:

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

目标是:

  • User1 进入 Webapp,点击一个 Item,然后看到 Editing 局部视图。
  • User2进入WebApp,点击同样的Item。我想为他锁定视图。

目标:一次只有一个用户可以编辑一个项目。

当用户 1 通过单击上一个/下一个/单击列表离开编辑视图时,注销或只是关闭他的浏览器,用户 2 必须立即(通过 SignalR)接收通知,并且编辑页面不再锁定

我尝试了几件事,但没有实现。

1°) 我必须在哪一部分声明 SignalR Hub?在右局部视图或父页面上?我都尝试了,但无法让 Disconnect 功能按我的意愿工作:(

我希望我已经清楚了,对不起我的英语

如果您需要其他信息,请不要犹豫

谢谢大家 :)

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);
    }
}

但是,我也知道我在实现断开连接时运气不佳。也许是一个例行程序,可以定期检查每个客户端或 pinger 的状态,任何东西。其他人可能对此有更好的想法。

于 2012-07-02T16:32:58.687 回答