c# - 使用 NHibernate 和 CaSTLe WCF 工具在 WCF 上下文中处理 Rebus 消息

标签 c# wcf nhibernate castle-windsor rebus

我们托管一些 WCF 服务,我们使用 CaSTLe Windsor 作为 IOC 并使用 WCF Facility 托管服务:

Component.For<IInter1>()
    .ImplementedBy<Class1>()
    .LifestylePerWcfOperation()
    .AsWcfService()

所有其他依赖项都在 Windsor 的 LifestylePerWcfOperation 中注册。

Rebus 处理程序是这样的:

public class TestCastleRebusHandler : IHandleMessages<CastleRebusMessage>
{
    public TestCastleRebusHandler(DependenchyWithWCFContext failsHere) { }
    public void Handle(CastleRebusMessage message) { }
}

问题是所有注册都是 PerWcfOperation,并且在接收消息时无法将它们注入(inject) Rebus,因为上下文不是 WCF。 Rebus 配置是:

_adapter = new Rebus.Castle.Windsor.WindsorContainerAdapter(Container);
_bus = Configure.With(_adapter)
    .Logging(x => x.ColoredConsole(LogLevel.Info))
    .Transport(x => x.UseMsmqAndGetInputQueueNameFromAppConfig())
    .MessageOwnership(m => m.FromRebusConfigurationSection())
    .Subscriptions(x => x.StoreInMemory())
    .CreateBus()
    .Start();

处理这种情况的最佳方法是什么?

最佳答案

最好的方法是在您的流程中为每个“逻辑应用程序”创建一个 WindsorContainer 实例,其中您的逻辑应用程序将是一个 WCF 应用程序和一个 Rebus 应用程序。

一般来说,尝试为您的组件配置生活方式以在两个不同的应用程序中工作是一项艰苦的工作,而且通常太难了,这实际上是您在尝试做的事情您有一个容器同时适用于 WCF 和 Rebus。

仔细想想,IoC 容器中生活方式的一切都被配置为匹配一个特定的激活模型,在 WCF 上下文中,它通常会像您一样将实例绑定(bind)到 WCF 操作。 p>

在 Rebus 的上下文中,如果可能的话,短暂的生活方式通常是更可取的,并且一切都会以这种方式进行。

因此,我建议您在进程中托管两个容器,并将每个容器配置为完全独立于另一个容器工作。这也带来了极大的灵 active ,因为将后端处理与服务于网络请求的部分分开将变得微不足道。

如果您的 WCF 应用程序中需要一个 IBus,您可以只配置一个 one-way client (*) 用于 WCF 容器。

我希望这是有道理的:)


(*) 请注意,文档已更新以反射(reflect) Rebus 2(版本 0.90.0 及更高版本)的 API,但它们与旧 Rebus 非常相似

关于c# - 使用 NHibernate 和 CaSTLe WCF 工具在 WCF 上下文中处理 Rebus 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32434077/

相关文章:

c# - 使用 EF 数据库设置 WCF 服务的正确方法是什么?

nhibernate - 使用 HiLo ID 生成策略时,应使用哪些类型来保存 ID?

nhibernate - NHibernate 3.x的预生成代理?

c# - DataGridView autoComplete comboBox 列在初始单元格离开时不保留值

.net - .NET 4.5.1 : How to enable TLS 1. 2 中使用 WebRequest 时的 WCF 客户端?

c# - NUnit Assert - 显示完整的错误信息

multithreading - 2013年WCF长投票

NHibernate 无法创建抽象类的实例

C# Deedle AggregateRowsBy/数据透视表示例

c# - 将文件流式传输到外部 SharePoint 时的上次修改属性