c# - Nservicebus 不在 msmq 中存储订阅者

标签 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>

最佳答案

我想出了问题所在。发布者应设置为 .IsTransactional(true) 以对订阅者使用 MSMQ 存储。

关于c# - Nservicebus 不在 msmq 中存储订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10716617/

相关文章:

c# - 如何在 C# 和 Windows 7 中设置音量?

c# - WCF URL 主机段更改为完整域名

windows-services - Msmq 和 WCF 服务

msmq - 私有(private)或公共(public) MSMQ

c# - MassTransit 是否支持 MSMQ over HTTP 传输?

c# - 比较 Msbuild 中的日期时间戳

c# - 为什么在 C# 中与接口(interface)共享命名空间

c# - 在 C# 中是否通过引用传递对象

.net - 本地未获取 "The maximum string content length quota (8192)"

c# - 为什么这个简单的 RESTful WCF 服务会因 404 错误而失败?