4

私はNServiceBusにかなり慣れていないので、質問があります。

私は自分の発行元であるWCFサービスを持っています(私はwcfによる発行を使用すべきではないことを知っています)。サブスクライバーとして別のWCFサービスがあります。

私の問題は、2番目の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>
4

1 に答える 1

3

私は何が悪いのかを理解しました。パブリッシャーは.IsTransactional(true)、サブスクライバーにMSMQストレージを使用するように設定する必要があります。

于 2012-05-25T06:35:18.390 に答える