3

我正在尝试在应用程序中使用 SignalR 集线器,但目前没有运气。我已经阅读了Scott Hanselman 的文章,还查看了这篇博客文章,其中展示了如何在 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 函数?

4

3 回答 3

2

您是否查看了 firebug 或其他嗅探 http 流量以确保没有错误的工具中的网络流量?这可能与路由有关。

另外一个附注,您不需要序列化我们为您做的任何事情。只需来回发送对象。

当您在 mvc 应用程序中时,您需要像任何其他静态脚本一样包含中心脚本:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
于 2011-09-29T09:30:11.190 回答
2

这有两个问题 - 1. 由于某种原因,旧版本的 jquery.validate 导致错误,但更新它对此进行了排序。2. 我试图转换为一个可以为空的 int,我猜这是不支持的。我确信有更优雅的方法来解决这个问题,但我只是将我的可为空的数据输入转换为字符串,如果不为空则解析它们

于 2011-10-03T12:38:02.590 回答
1

jquery.validate.js 是罪魁祸首。由于某种原因它正在触发 GET 请求,并且在排除 js 文件后,SignalR 请求开始触发 POST 请求。也许我应该像 Jordan Wallwork 提到的那样更新它。

于 2011-12-05T02:00:04.180 回答