在编写Windows服务时导出来自WCF服务的MEF部件

时间:2015-05-04 08:51:03

标签: c# wcf mef

我有一个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电话,但我不知道如何开展这项工作。

0 个答案:

没有答案