【问题标题】:Castle WCF Integration Channel ClosingCastle WCF 集成通道关闭
【发布时间】:2011-08-24 14:07:14
【问题描述】:

我的印象是,为我的 WCF 服务连接释放组件会关闭与该组件关联的通道。但是,请考虑以下事项:

// In some installer class
public void Install(IWindsorContainer container, IConfigurationStore store) {
    container.Register(
        Component.For<IMyService>()
            .Forward<IMyOtherService>()
            .AsWcfClient(WcfEndpoint.FromConfiguration("WSHttpBinding_IMyService"))
            .LifeStyle.Transient
    );
}

// In some local class enabling constructor injection for IMyService
public void DoStuff() {
    IWindsorContainer container = GetContainer();

    var myService = container.Resolve<IMyService>();

    if(myService != null) {
        container.Release(myService);

        // I had always thought this shouldn't work
        // as the channel should be closed - but its
        // state is Opened
        var foo = myService.GetSomething( ... );

        DoOtherStuff(foo);
        ...
    }
}

我尝试了各种生活方式,包括我自己的生活方式,它继承了AbstractLifestyleManager 并调用了base.Release(context),但在组件发布后频道仍然保持打开状态。这是预期的行为吗?

那么在使用 Castle WCF 集成时如何正确关闭 WCF 连接通道/代理?

编辑

删除了使用LifeStyle.Singleton(在处置容器时释放通道)作为使用其他生活方式产生相同效果的提及。

【问题讨论】:

    标签: c# wcf castle-windsor integration castle


    【解决方案1】:

    container.Release(myService); 不会释放你的单例组件。通道将与组件一起释放,如果是单例,则意味着容器被释放。

    【讨论】:

    • 我尝试了其他 LifeStyles,包括 Transient,但结果仍然相同。
    • 您正在运行什么版本的设施?我相当肯定这应该有效
    • 装配 v2.5.0.0 - 文件 v2.5.0.82 - 产品 v2.5.0.82
    • 好的,我想您可能想向问题跟踪器报告此问题,因为这似乎是一个错误
    • 你在这方面有什么进展吗?我似乎在直播中遇到了一个问题,我让数千个频道卡在了记忆中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多