1

我是 ASP.NET MVC 和 Signalr 的新手。我正在按照教程通过信号器学习与 ASP>NET 的 SQL 交互。

我尝试了以下步骤

  1. 创建了一个新项目“ASP.NET MVC3”
  2. 带有剃须刀视图引擎的选定 Internet 应用程序。
  3. 通过 nuget 安装 Microsoft ASP.NET 信号器
  4. 创建了相同的数据库和相同的表。
  5. 通过添加连接字符串修改了我的 webconfig。
  6. 应用 Global.asax 中的更改以启用和停止侦听器。
  7. 添加了一个类“JobInfo” - 类似于链接中的第 5 步。
  8. 在教程的第 7 步中,当我单击 project > add new item 时,我没有找到 Signalr hub 类。所以我添加了一个同名的普通类

代码

   namespace MvcApplication1
{
    public class JobHub
    {
        public static void Show()
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<JobHub>();
            context.Clients.All.displayStatus();
        }
    }
}

现在,当我构建我的解决方案时,我收到了这个错误

  The type 'MvcApplication1.JobHub' cannot be used as type parameter 'T' in the generic type or method 'Microsoft.AspNet.SignalR.Infrastructure.IConnectionManager.GetHubContext<T>()'. 
There is no implicit reference conversion from 'MvcApplication1.JobHub' to 'Microsoft.AspNet.SignalR.Hubs.IHub'.

另外,我不确定如何实现第 8 步,因为当我单击控制器添加“valueController”时,我无法从“ApiController”继承它。

下面是我的应用程序的屏幕截图。

我怎样才能解决这个问题? 在此处输入图像描述

4

1 回答 1

4

我认为这是您缺少的部分。看来JobHub必须继承自Hub. 包括这个引用,然后尝试继承自Hub.

using Microsoft.AspNet.SignalR.Hubs;

public class JobHub : Hub
{
    public static void Show()
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<JobHub>();
        context.Clients.All.displayStatus();
    }
}

第 8 步

@Zerotoinfinite - asp.net mvc 4中包含的似乎using System.Web.Http;是必需的。因此,您可能想要启动一个 mvc 4 项目,或者,只需使用一个不会有任何不同的常规控制器。ApiController

public class ValuesController : Controller
{

   JobInfoRepository objRepo = new JobInfoRepository();


   // GET api/values
   public JsonResult Get()
   {
       return Json(objRepo.GetData());
   }
}
于 2013-03-20T19:30:47.087 回答