簡體   English   中英

使用CustomConfigurationSource創建NServiceBus時發生異常

[英]Exception while creating NServiceBus with CustomConfigurationSource

我需要使用CustomConfigurationSource創建NServiceBus來替換我的app.config。

我已經在代碼中實現了CustomConfiguration源,但是在創建總線時出現以下異常:

未處理System.NullReferenceException HResult = -2147467261 Message =對象引用未設置為對象的實例。 Source = NServiceBus.Core StackTrace:位於c:\\ TeamCity \\ buildAgent \\ work \\ nsb.master_10 \\ src \\ unicast \\ NServiceBus.Unicast \\ UnicastBus.cs:line中的NServiceBus.Unicast.UnicastBus.NServiceBus.IStartableBus.Start(Action startupAction) 852

我在A類中創建總線,如下所示:

public class A: IA
{
    public static IBus Bus { get; private set; }

    public A()
    {
        CreateBus();
    }

    private void CreateBus()
    {
        Bus = NServiceBus.Configure.With()
            .CustomConfigurationSource(new AConfigSource())
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .LoadMessageHandlers()
                .ImpersonateSender(false)
            .CreateBus()
            .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
            // Exception thrown here ******
    }
}

我的配置類:

public class AConfigSource: IConfigurationSource
{
    #region Implementation of IConfigurationSource

    public T GetConfiguration<T>() where T : class, new()
    {
        if (typeof(T) == typeof(MessageForwardingInCaseOfFaultConfig))
            return MessageForwardingInCaseOfFaultConfiguration() as T;

        if (typeof(T) == typeof(MsmqTransportConfig))
            return MsmqTransportConfiguration() as T;

        if (typeof(T) == typeof(UnicastBusConfig))
            return UnicastBusConfiguration() as T;

        // leaving the rest of the configuration as is:
        return ConfigurationManager.GetSection(typeof(T).Name) as T;

    }

    #endregion Implementation of IConfigurationSource

    #region Private

    private MessageForwardingInCaseOfFaultConfig MessageForwardingInCaseOfFaultConfiguration()
    {
        return new MessageForwardingInCaseOfFaultConfig
        {
            ErrorQueue = "error"
        };
    }

    private UnicastBusConfig UnicastBusConfiguration()
    {
        return new UnicastBusConfig();
    }

    private MsmqTransportConfig MsmqTransportConfiguration()
    {
        return new MsmqTransportConfig
        {
            ErrorQueue = "error",
            InputQueue = "myInputQueue",
            MaxRetries = 5,
            NumberOfWorkerThreads = 1
        };
    }

    #endregion Private
}

是什么原因導致NullReferenceException? 我錯過了哪些步驟來覆蓋所有nservicebus配置?

更新:我正在使用NServiceBus版本3.3.8。

更新:根據約翰的回答,我將私有UnicastBusConfiguration方法更改如下:

    private UnicastBusConfig UnicastBusConfiguration()
    {
        return new UnicastBusConfig
        {
            ForwardReceivedMessagesTo = "",
            MessageEndpointMappings = new MessageEndpointMappingCollection()
        };
    }

我仍然遇到上述相同的異常。

這是我需要在A類中運行的配置:

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
  </configSections>
  <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
  <UnicastBusConfig ForwardReceivedMessagesTo="">
    <MessageEndpointMappings></MessageEndpointMappings>
  </UnicastBusConfig>
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NServiceBus" publicKeyToken="9fc386479f8a226c" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="NServiceBus.Core" publicKeyToken="9fc386479f8a226c" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

詳細信息:我正在運行WPF應用程序。 我在解決方案中添加了一個類庫來托管nservicebus。 我創建了上述對象“ Class A”的實例。 我需要nservicebus基於A類的app.config進行配置,而不是基於WPF啟動項目的app.config。

也許CustomConfigurationSource是過大的? 有沒有更好的方法來命令NServiceBus在A類項目中使用app.config進行配置?

更新:我收到以下錯誤,指示缺少UnicastBus.cs類。 我在我的項目中引用了NserviceBus.Host ...

'c:\\ TeamCity \\ buildAgent \\ work \\ nsb.master_10 \\ src \\ unicast \\ NServiceBus.Unicast \\ UnicastBus.cs'的定位源。 (無校驗和。)文件'c:\\ TeamCity \\ buildAgent \\ work \\ nsb.master_10 \\ src \\ unicast \\ NServiceBus.Unicast \\ UnicastBus.cs'不存在。 在腳本文檔中查找'c:\\ TeamCity \\ buildAgent \\ work \\ nsb.master_10 \\ src \\ unicast \\ NServiceBus.Unicast \\ UnicastBus.cs'...在項目中查找'c:\\ TeamCity \\ buildAgent \\ work \\ nsb .master_10 \\ src \\ unicast \\ NServiceBus.Unicast \\ UnicastBus.cs”。 在項目中找不到文件。

只是猜測,但我會說您可能需要初始化一些UnicastBusConfig屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM