我正在使用Signalr 1.1而我正在尝试一个涉及更新进度条的简单项目。我已经读过其他有类似问题的人,但似乎没有真正的帮助。我以为我可能已经失去了理智。
我设置了一个中心
using Microsoft.AspNet.SignalR;
namespace VBS_MVC.Hubs
{
public class ProgressBarHub : Hub
{
public void CheckSend()
{
Clients.All.updateProgressBar();
}
}
}
其中,我并非真的需要这个,但我已将其设置为进行测试。
我的控制器看起来像这样:
[HttpPost]
public ActionResult ProgressBarTest(string SignalRConnectionId)
{
// Get the value of the hidden from the request
string currentClientConnectionId = SignalRConnectionId;
// Get the hub context
Microsoft.AspNet.SignalR.IHubContext myHubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<Hubs.ProgressBarHub>();
// Resolve a the client that corresponds to the current request
dynamic currentClient = myHubContext.Clients.Client(currentClientConnectionId);
currentClient.updateProgressBar();
System.Threading.Thread.Sleep(2000);
myHubContext.Clients.Client(currentClientConnectionId).updateProgressBar();
System.Threading.Thread.Sleep(3000);
myHubContext.Clients.All.updateProgressBar();
System.Threading.Thread.Sleep(2000);
return View();
}
和我的客户:
<h2>ProgressBarTest</h2>
@using (Html.BeginForm())
{
<input type="hidden" id="mySignalRConnectionIdHidden" name="SignalRConnectionId" />
<input type="submit" />
}
<button class="signalr">Test Send</button>
<div id="counter">
Counter
</div>
<script src="../../Scripts/jquery.signalR-1.1.4.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
var progress = $.connection.progressBarHub;
// Create a function that the hub can call to broadcast messages.
progress.client.updateProgressBar = function () {
console.log('test');
};
$('.signalr').click(function () {
progress.server.checkSend();
});
$.connection.hub.start().done(function () {
$("#mySignalRConnectionIdHidden").val($.connection.hub.id);
});
$.connection.hub.start();
});
</script>
connectionId看起来像是把它变成了帖子就好了,如果我点击我在表单之外的按钮(它直接与集线器对话)工作正常。正如您所看到的那样,我试图以不同的方式向客户广播,但似乎没有任何效果。我错过了什么?
答案 0 :(得分:0)
尝试更改此行:
Clients.All.updateProgressBar();
要:
Clients.All.UpdateProgressBar();
我认为动态方法名称区分大小写。
答案 1 :(得分:0)
尝试将此添加到您的集线器类:
[HubName("progressBarHub")]
集线器名称区分大小写,您在javascript中使用小写的“p”调用它。