将SignalR与ASP.NET MVC3一起使用

时间:2011-09-29 09:08:32

标签: c# javascript asp.net-mvc signalr

我正在尝试在应用程序中使用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函数吗?

3 个答案:

答案 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提到的那样更新它。