如何配置SignalR以允许ASP.NET MVC应用程序与Windows服务通信?

时间:2015-03-23 21:58:27

标签: c# windows asp.net-mvc-4 signalr

我有一个SignalR中心,我想用它来发送消息从Windows服务到ASP.NET MVC应用程序。我正在使用SqlServer背板,我可以通过SMSS看到已创建表并通过Windows服务插入行。问题是没有调用客户端方法。

我想知道问题是什么,因为我已经将服务和Web应用程序配置为使用相同的背板(通过连接字符串)。到目前为止,我已经尝试在我的集线器上调用静态方法(后者又使用hubContext将消息发送到客户端),当我使用调试器逐步调试代码时调用该方法,但在浏览器中,没有任何反应。我也试过在Windows服务本身创建一个集线器上下文,并通过集线器发送消息,但这也不起作用。

以下是相关的代码: ASP.NET MVC SignalR配置:

    public void Configuration(IAppBuilder app)
    {
            GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
            app.MapSignalR();
            GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => s_jsonSerializerFactory.Value);
            UnitsHub.NotifyWorker.Start();
    }

Windows服务配置:

public void Configuration(IAppBuilder app)
{
        app.UseCors(CorsOptions.AllowAll);
        GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
        app.MapSignalR();
}

客户端方法:

constructor(sr: SignalR, jobId: any) {

    sr.jobsHub.client.jobStarted = this.jobStarted.bind(this);
    sr.jobsHub.client.jobCompleted = this.jobCompleted.bind(this);

    var id = 1044;
    var jId = id.toString();

    sr.jobsHub.server.trackJob(jId, true);
}

jobStarted() {
    console.log("Job started!");
}

jobCompleted() {
    console.log("job completed");
}

SignalR Hub方法:

public static void JobStarted(string jobId)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<JobsHub>();
        hubContext.Clients.Group(jobId).jobStarted();
    }

在Windows服务中使用集线器:

JobsHub.JobStarted(runningJob.Id.ToString());

编辑:我已经启用了跟踪功能,但它似乎无法提供有关问题的线索。每次针对数据库运行查询时,它只是说&#34;没有收到记录。&#34;

0 个答案:

没有答案