我有一个WindowsService
应用程序,它使用MEF
进行对象组合。组合工作正常(从某种意义上说,所有导入都满足并且应用程序启动并且运行没有错误)但是我有以下问题:其中一个导出的部分来自WCF服务。为了实现这一点,我对WCF
服务进行了同步调用并获取实例。然后我将结果用作属性导出。我有类似下面的代码,除了层次结构中的更多对象需要这个导出的代理。
public class ExportedPrimitives{
[ImportingConstructor]
public ExportedPrimitives(IAgentService agentService)
{
//...
try {
agent = agentService.GetAgent();
}
catch (Exception ex){
agent = new AgentModel();
}
}
[Export("CurrentAgent")]
public AgentModel Agent { get { return agent; } }
}
[Export]
public class Service:ServiceBase{
[ImportingConstructor]
public Service([Import("CurrentAgent")]AgentModel agent, ...other depencencies...){
//...
}
//...
}
由于这种方法,服务需要很长时间才能启动,而在慢速机器上部署时服务会超时。我知道我不允许在Program.Main
或服务OnStart
方法中执行长时间运行的代码,但在服务可以执行其操作之前我需要该代理实例。我真的不想修改默认服务启动超时值。另外我认为我不能使用ServiceBase.RequestAdditionalTime
,因为我只使用构造函数注入。
我的问题是:如何改善服务启动时间?我确定我需要进行async
电话,但我不知道如何开展这项工作。