我正在尝试将NServiceBus UnicastBusConfig从Web.config移动到(VB.NET)代码,我遇到了一些问题。原始Web.config如下所示:
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="Messages" Endpoint="TSInputQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
当总线配置了这个时,“assembliesToEndpoints”属性最终看起来像这样,一切正常:
然后我从Web.config中删除了配置并创建了一个新的IConfigurationSource:
Public Class UnicastBusConfigurator
Implements IConfigurationSource
Public Function GetConfiguration(Of T As Class)() As T Implements NServiceBus.Config.ConfigurationSource.IConfigurationSource.GetConfiguration
If (GetType(T) Is GetType(UnicastBusConfig)) Then
Dim mapping = New MessageEndpointMapping()
mapping.Endpoint = "InputQueue"
mapping.Messages = "Messages"
Dim unicastBusConfig As UnicastBusConfig = New UnicastBusConfig()
unicastBusConfig.MessageEndpointMappings.Add(New MessageEndpointMapping())
Return TryCast(unicastBusConfig, T)
End If
Return TryCast(ConfigurationManager.GetSection(GetType(T).Name), T)
End Function
End Class
我在总线初始化中添加了以下部分(由于某种原因,扩展方法无效......):
config = config.CustomConfigurationSource(New UnicastBusConfigurator)
我已确保执行UnicastBusConfigurator的GetConfiguration方法,但assembliesToEndpoints属性看起来不正确:
注意HashTable中的第三行,它是空的。现在,config.CreateBus()。Start()失败:
Spring.Objects.Factory.ObjectCreationException:创建名为“NServiceBus.Unicast.UnicastBus”的对象时出错:设置属性值时出错:PropertyAccessExceptionsException(1 errors);嵌套的PropertyAccessExceptions是: [Spring.Core.TypeMismatchException:无法将类型[System.Collections.Hashtable]的属性值转换为属性'MessageOwners'所需的类型[System.Collections.IDictionary]。,内部异常:System.ArgumentException:加载消息程序集时出现问题: - - &GT; System.ArgumentException:String的长度不能为零。
异常似乎是由空行引起的(“String不能有零长度。”)。
关于我做错了什么的任何想法?
答案 0 :(得分:1)
我认为这里的问题是代码实际上没有将映射添加到集合中。代码添加一个新的空MessageEndpointMapping。我认为它应该是:
unicastBusConfig.MessageEndpointMappings.Add(mapping)
这应该给NSB一些东西来映射。