Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 ASP.NET MVC 4后台操作_Asp.net Mvc 4_Background_Signalr - Fatal编程技术网

Asp.net mvc 4 ASP.NET MVC 4后台操作

Asp.net mvc 4 ASP.NET MVC 4后台操作,asp.net-mvc-4,background,signalr,Asp.net Mvc 4,Background,Signalr,我正在为ASP.NET MVC 4后台操作寻找漂亮而优雅的体系结构解决方案 我的目标是建立一个自己生活的世界,客户只能与之互动。现在让我们假设它将是一个简单的时钟,客户可以在它上面观看 现在我有了WebBackrounder+信号机软件包 韦伯·克鲁德: [assembly: PostApplicationStartMethod(typeof(WebBackgrounderSetup), "Start")] [assembly: ApplicationShutdownMethod(typeof(

我正在为ASP.NET MVC 4后台操作寻找漂亮而优雅的体系结构解决方案

我的目标是建立一个自己生活的世界,客户只能与之互动。现在让我们假设它将是一个简单的时钟,客户可以在它上面观看

现在我有了WebBackrounder+信号机软件包

韦伯·克鲁德:

[assembly: PostApplicationStartMethod(typeof(WebBackgrounderSetup), "Start")]
[assembly: ApplicationShutdownMethod(typeof(WebBackgrounderSetup), "Shutdown")]
namespace LibcanvasStudy.App_Start
{
    public static class WebBackgrounderSetup
    {
        static readonly JobManager _jobManager = CreateJobWorkersManager();
        public static RedrawJob RedrawJob { get; private set; }

        public static void Start()
        {
            _jobManager.Start();
        }

        public static void Stop()
        {
            _jobManager.Stop();
        }

        public static void Shutdown()
        {
            _jobManager.Dispose();
        }

        private static JobManager CreateJobWorkersManager()
        {
            RedrawJob = new RedrawJob(TimeSpan.FromSeconds(1));
            var manager = new JobManager(new[] { RedrawJob }, new JobHost());
            return manager;
        }
    }
当作业执行上升事件且信号器集线器捕捉到它时,重新绘制作业:

public class CanvasHub : Hub
{
    public CanvasHub()
    {
        if (WebBackgrounderSetup.RedrawJob != null)
            WebBackgrounderSetup.RedrawJob.Executing += (sender, args) => Request(args);
    }

    public void Request(RedrawEventArgs eventArgs)
    {
        Clients.All.redraw(...);
    }   
}
我现在有一个主要问题-如何从我的JobManager中动态添加和删除作业


我也不喜欢这个工作事件系统,对我来说有点尴尬。有什么建议吗?

达林说的是正确的,但可以解决。例如,对于此类场景,我所做的是使用一个内部WCF服务来处理所有作业,您可以使用net.tcp或内存管道从调度或工作流引擎调用它。通过这种方式,您可以从所有IIS糖衣中获益。并且不需要封送线程和错误处理

第二,实现某种类型的事件总线来解耦信号器和域逻辑

我编写了这个小库,它在域事件和信号器之间进行代理

使用nuget安装

Install-Package SignalR.EventAggregatorProxy 
请查看wiki,了解连接它所需的几个简单步骤

要获得超轻量级进程内事件总线,请查看Caliburn.Micros EventAggregator

您认为在MVC应用程序的任何部分使用此代码如何

IHubContext hub = GlobalHost.ConnectionManager.GetHubContext<CanvasHub>();
hub.Clients.All.redraw(redrawData);
IHubContext hub=GlobalHost.ConnectionManager.GetHubContext();
hub.Clients.All.redraw(重绘数据);

在你继续这一方向之前,我建议你阅读这篇博文:希望在阅读之后,你不再想在你的web应用程序中实现任何后台任务。实际上,我在写这段代码之前就已经阅读了这篇博文。这就是我决定使用WebBackgrounder的原因。我希望你不要在你的web应用程序中使用它。MVC应用程序与WCF双工服务相结合如何?只要你有后台操作,你将MVC应用程序与什么结合并不重要。正确的方法是在一个单独的进程中移动这些操作(可能是一个Windows服务)。在MVC应用程序的任何部分中使用这些代码会怎么样<代码>IHubContext hub=GlobalHost.ConnectionManager.GetHubContext();hub.Clients.All.redraw(重绘数据)我认为它不好,因为它将您与signar结合在一起,但同时它看起来非常面向用户界面(CanvasHub),所以在这种情况下可能没问题,但我认为分离类似这样的关注点是一个很好的实践