2012-05-23 34 views
4

我對NServiceBus相當新,我有一個問題。Nservicebus不存儲用戶msmq

我有一個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> 
+0

好的,我想清楚了什麼是錯的......在我的出版商中,我應該設置.IsTransactional(true),修復問題... – mandrive

+0

你應該回答你自己的問題,以便將來的人看到有一個答案,如果他們有同樣的問題,請參閱http://blog.stackoverflow.com/2012/05/encyclopedia-stack-exchange/ SO鼓勵回答你自己的問題。 –

回答

3

我想通了什麼是錯的。發佈者應該設置爲.IsTransactional(true)爲訂戶使用MSMQ存儲。