2

我试图采用这篇文章http://www.asp.net/signalr/overview/getting-started/tutorial-high-frequency-realtime-with-signalr中的演示,它是用 vS2012 开发的,但是我使用的是 vs2010。我做了模型:

  [HubName("moveShapeHub")]
    public class MoveShapeHub : Hub
    {
        public void UpdateModel(ShapeModel clientModel)
        {
            clientModel.LastUpdatedBy = Context.ConnectionId;
            Clients.AllExcept(clientModel.LastUpdatedBy).updateShape(clientModel);
        }
    }

修改后的 Global.cs:

  protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            RouteTable.Routes.MapHubs();
        }

在视图中:

 var moveShapeHub = $.connection.moveShapeHub,
        $shape = $("#shape"),

            shapeModel = {
                left: 0,
                top: 0
            };

        moveShapeHub.client.updateShape = function (model) {
            shapeModel = model;
            $shape.css({ left: model.left, top: model.top });
        };

        $.connection.hub.start().done(function () {
            $shape.draggable({
                drag: function () {
                    shapeModel = $shape.offset();
                    moveShapeHub.server.updateModel(shapeModel);
                }
            });

我收到以下错误:无法获取未定义或空引用的属性“客户端”。

知道我做错了什么;将不胜感激您的建议。

4

2 回答 2

0

看起来您的 HTML 中没有包含以下代码:

<script src='/signalr/hubs'></script>

确保在包含 signalr js 库之后包含该代码段。

如果您仍然正确添加脚本标记,那么您的服务器托管在不同的端口上时,您会遇到路径误解问题。

假设您的示例正在运行,您可以通过在浏览器 http://localhost:1337中查看您的信号器/集线器文件,您应该获得生成的 JavaScript。http://localhost:1337/signalr/hubs

人们遇到的一个常见问题是他们包含 /signalr/hubs 文件,但他们将网站托管在http://localhost:1337/bar/. 因此,SignalR 尝试从http://localhost:1337/signalr/hubs它真正位于的位置加载集线器文件http://localhost:1337/bar/signalr/hubs

验证您包含的 /signalr/hubs 是否指向正确的位置。我通常这样做:

<script src="<%: ResolveUrl("~/signalr/hubs") %>"></script>

始终解析应用程序相对 URL。

RouteTable.Routes.MapHubs();在您绘制任何其他路线之前,请务必致电。

于 2013-05-26T20:05:41.633 回答
0

您是否验证了正在与服务器建立连接,如果没有在.fail(function(){ alert("failed to connect")});您的connection.hub.start方法的末尾添加a,查看它是否连接正常,然后尝试此方法:

moveShapeHub.on('updateShape', function(model) {
        shapeModel = model;
        $shape.css({ left: model.left, top: model.top });
    });
于 2013-05-26T12:16:24.273 回答