2

我正在尝试将 SignalR 实现到我的 ASP.Net“网站项目”中。(这是一个现有的应用程序,它是一个网站项目,不能转换为一个 Web 应用程序。)

尝试运行 SignalR 示例代码时出现以下错误。(这是基本的股票代码示例。只是想在我开始将其实施到现有代码中之前验证我是否已正确设置所有内容。)

这是我得到的错误

Unhandled exception at line 71, column 5 in http://localhost:49218/SchoolFinancial/SignalR.Sample/SignalR.StockTicker.js

0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'client': object is null or undefined

这是引发错误的javascript

// Add client-side hub methods that the server will call
$.extend(ticker.client, {
    updateStockPrice: function (stock) {
        var displayStock = formatStock(stock),
            $row = $(rowTemplate.supplant(displayStock)),
            $li = $(liTemplate.supplant(displayStock)),
            bg = stock.LastChange === 0
                ? '255,216,0' // yellow
                : stock.LastChange > 0
                    ? '154,240,117' // green
                    : '255,148,148'; // red

        $stockTableBody.find('tr[data-symbol=' + stock.Symbol + ']')
            .replaceWith($row);
        $stockTickerUl.find('li[data-symbol=' + stock.Symbol + ']')
            .replaceWith($li);

        $row.flash(bg, 1000);
        $li.flash(bg, 1000);
    },

    marketOpened: function () {
        $("#open").prop("disabled", true);
        $("#close").prop("disabled", false);
        $("#reset").prop("disabled", true);
        scrollTicker();
    },

    marketClosed: function () {
        $("#open").prop("disabled", false);
        $("#close").prop("disabled", true);
        $("#reset").prop("disabled", false);
        stopTicker();
    },

    marketReset: function () {
        return init();
    }
});

这是允许 SignalR 使用网站项目的 Web.Config 设置更改

(这是在 Web.Config 的以下部分中)

  <modules runAllManagedModulesForAllRequests="true">
  </modules>

我是使用 SignalR 的新手,从我在之前的帖子中发现的内容来看,如果我能让它正常工作,这应该可以解决我的问题。

因此,如果有人对在 ASP.Net 的网站项目中使用 SignalR 有任何经验,我将不胜感激任何建议/建议。

不确定是否重要,但我使用的是 Visual Studio 2012 (ASP.Net / C#),并且我的网站在 .Net Framework 4.5 版本上。

在此先感谢您的帮助...

4

1 回答 1

2

您收到此错误可能是由于以下任何原因:-

1)yourbaseurl/signalr/hubs 给出 404。您可以在页面加载后在 chrome 控制台中验证。如果您收到此错误,您需要确保已映射集线器路由。使用

RouteTable.Route.MapHubs() 

在你的 global.asax 应用程序中启动或使用一些启动注入器,如 WebActivatorEx。

 void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
        RouteTable.Routes.MapHubs();
    }

2) 所有与 SIGnalr 相关的 dll 都是兼容版本。如果您安装了库包管理器控制台,这将不是问题。

3)如果上述步骤不是问题,那么问题是客户端代理没有正确生成。这意味着如果您点击 yourbaseurl/signalr/hubs 您应该能够看到注册的集线器名称与 c# 集线器类名相同

proxies.stockTicker.client 

初始化和

proxies.stockTicker.server 

定义的函数名称与 c# HubProxy 中声明的函数名称相同。并且所有这些都存在于以下原型 decalation 之下。

 $.hubConnection.prototype.createHubProxies

4) 如果您无法获得按照步骤 3 生成的代理,请尝试将 SignalR.StockTicker 中的类文件放入 AppCode。

注意:- 我刚刚尝试让示例在 Asp.Net 4.5 网站上运行。

一切顺利!!

于 2013-03-19T02:48:00.053 回答