如何實現這個完整的示例...
using System
using Core.Services;
using System.Threading.Tasks;
using System.Web.Hosting;
public interface IISHostedProcessService : IRegisteredObject, IDisposable
{
Task Start();
}
public class CoreHostedProcess : IISHostedProcessService
{
protected bool running;
public CoreHostedProcess()
{
}
public virtual Task Start()
{
return Task.Run(() =>
{
running = true;
HostingEnvironment.RegisterObject(this);
});
}
public virtual void Stop(bool immediate)
{
running = false;
HostingEnvironment.UnregisterObject(this);
}
public virtual void Dispose()
{
}
}
確定這就是核心員工定義,現在我們定義了一個託管的過程中做一些有用的東西像嗯,運行任務的時間表...
using log4net;
using System.Threading.Tasks;
using System.Timers;
using System;
using Core.Utilities.Objects.Entities;
using System.Linq;
using System.Net.Http;
using Core.Objects;
using Ninject;
public class TaskScheduler : CoreHostedProcess
{
static readonly ILog log = LogManager.GetLogger(typeof(TaskScheduler));
Timer timer = new Timer(60000);
IKernel kernel;
public TaskScheduler(IKernel kernel) : base()
{
this.kernel = kernel;
}
async void RunTasks(object sender, ElapsedEventArgs e)
{
//TODO: write code to fetch tasks and run them
}
public override async Task Start()
{
log.Info(" Initialising Task Scheduler.");
timer.Elapsed += RunTasks;
RunTasks(null, null);
timer.Start();
await base.Start();
}
public override void Stop(bool immediate)
{
log.Info(" Stopping Task Scheduler.");
timer.Stop();
base.Stop(immediate);
}
}
現在好了可以使用託管過程...
在IIS中,應用先進的設置中設置「預加載啓用」爲真,以確保應用程序內保持在服務器上裝載後初始負載。
當應用程序加載時,例如,如果使用owin /在老同學全球ASAX文件,你可以添加以下...
public class Startup
{
static readonly ILog log = LogManager.GetLogger(typeof(Startup));
public static IKernel Kernel { get; private set; }
static List<IISHostedProcessService> hostedProcesses = new List<IISHostedProcessService>();
public void Configuration(IAppBuilder app)
{
hostedProcesses.Add(new TaskScheduler());
}
}
現在,你應該有你需要的兩個定義和初始化您的TaskScheduler一切從IIS託管的C#應用程序中,我使用位於EF託管分區頂部的OData構建了一個用於管理任務數據的API,以便我可以管理系統中的任務集。
部署後,我相信我必須通過簡單地向它發出請求(任何url),至少一次點擊應用程序,一旦加載IIS將保持它運行(從而保持您的託管過程運行),直到您停止IIS應用程序託管過程。
當應用程序停止時,託管進程將調用Stop方法,「取消註冊託管進程」並將其丟棄到服務器上,從而將託管進程綁定到IIS應用程序生命週期。
我覺得發佈OData和EF代碼太多了。 希望這應該做。
來源
2017-03-18 20:48:57
War