我正在尝试在应用程序中使用SignalR集线器,但目前没有运气。我已阅读Scott Hanselman's article,还查看了this博客文章,其中展示了如何在MVC中实现它,基本上做同样的事情。不幸的是,我没有运气。在客户端,javascript似乎工作得很好[除了什么都没发生],但是当我在代码中放置断点时,它表明控制器正在被调用,而不是集线器代码。我正在使用的代码是:
// Client side javascript:
var hooking;
$(function() {
// Setup SignalR
hooking = $.connection.hooking;
hooking.removeLead = function(ref) {
$("lead" + ref).remove();
};
$.connection.hub.start();
}
});
// Hooking.cs (placed in application root)
public class Hooking : Hub
{
public void Submit(string jsonString)
{
var serializer = new JavaScriptSerializer();
var json = serializer.Deserialize<HookingLeadResult>(jsonString);
Clients.removeLead(json.Ref); // Remove lead from client hooking windows
// update lead gen
}
}
当我稍后在我的代码中调用hooking.submit(resultJson);
时出于某种原因调用我的HookingController的Index动作(这是当前页面)。有人知道如何从Hooking.cs正确调用Submit函数吗?
答案 0 :(得分:2)
您是否查看过firebug中的网络流量或其他嗅探http流量的工具以确保您没有错误?这可能与路由有关。
另外,请注意,您无需序列化我们为您执行的任何操作。只需来回传送物品。
当您使用mvc应用程序时,您需要像任何其他静态脚本一样包含集线器脚本:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
答案 1 :(得分:2)
这有两个问题 - 1.由于某种原因,旧版本的jquery.validate导致错误,但更新它会对此进行排序。 2.我试图转换为可以为空的int,我猜这是不支持的。我确信有更优雅的方法来解决这个问题,但我只是将我的可空数据输入转换为字符串并解析它们,如果不是null
答案 2 :(得分:1)
jquery.validate.js是罪魁祸首。由于某种原因,它触发了GET请求,在排除了js文件后,SignalR请求开始触发POST请求。也许我应该像Jordan Wallwork提到的那样更新它。