Nservicebus不会将用户存储在msmq中

时间:2012-05-23 08:54:33

标签: c# wcf msmq nservicebus publish-subscribe

我是NServiceBus的新手,我有一个问题。

我有一个WCF服务,我的发布者(我知道我不应该使用wcf发布)。 我有另一个WCF服务作为订阅者。

我的问题是,当第二个wcf服务要订阅发布者时,我的发布者不会将此信息存储在msmq中(使用.MsmqSubscriptionStorage()时)。 但是当发布者将订阅者存储在内存中时(.InMemorySubscriptionStorage())

,它就可以工作

如何强制我的总线使用msmq?

下面我将给出发布者和订阅者的代码。

发布者总线初始化:

Bus = NServiceBus.Configure.WithWeb()
                .DefaultBuilder()
                .XmlSerializer()
                .MsmqTransport()
                .IsTransactional( false )
                .PurgeOnStartup( false )
                .UnicastBus()
                .LoadMessageHandlers()
                .ImpersonateSender( false )
                .MsmqSubscriptionStorage()
                .CreateBus()
                .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());

发布商配置:

<configSections>
        <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
        <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
        <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    </configSections>
    <MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>

订阅者总线初始化:

Bus = NServiceBus.Configure.WithWeb()
                .DefaultBuilder()
                .XmlSerializer()
                .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
                .UnicastBus()
                .ImpersonateSender(false)
                .LoadMessageHandlers()
                .CreateBus()
                .Start(() => Confgure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());

订阅者配置:

    <configSections>
        <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
        <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
        <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    </configSections>

    <MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>

    <UnicastBusConfig>
        <MessageEndpointMappings>
            <add Messages="Messages" Endpoint="FirstService" />
        </MessageEndpointMappings>
    </UnicastBusConfig>

1 个答案:

答案 0 :(得分:3)

我弄清楚出了什么问题。应该使用.IsTransactional(true)设置发布者,以便为订阅者使用MSMQ存储。