我正在尝试使用NSerivceBus,尽管它主要是顺利进行,但我很难理解如何配置EndPointName。
因此,例如,在完成以下几个示例后,我设法提出了以下内容,但我所做的任何更改EndPoint名称的尝试都失败了。
所以myServer队列当前是它的名字,我想从这里命名空间:
namespace MyServer
{
class EndPointConfig : IConfigureThisEndpoint, AsA_Server
{
}
}
但是当我把[EndpointName(“AnotherQueue”)]没有任何改变时(除非它没有填满myServer队列。
我还尝试更改Global.ASAX:
public static IBus Bus { get; set; }
void Application_Start(object sender, EventArgs e)
{
Bus = NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.DefineEndpointName("AnotherQueue")
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
}
但同样,它没有用。
我正在通过查看mmc并检查那里排队的消息来测试它。
最后我尝试改变web.config
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NserviceBus.Core"/>
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/>
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MyMessage" Endpoint="AnotherQueue"></add>
</MessageEndpointMappings>
</UnicastBusConfig>
仍然没有。
有人能帮忙吗?我仍然试图解决这个问题(这对我来说是一项新技术)所以如果我对这个问题提出质疑那么我就会失职。
提前致谢 莱克斯
答案 0 :(得分:6)
夫妻俩:
我不是百分百肯定,但我不认为您想要使用IConfigureThisEndpoint,如果您在Web应用程序中托管,则不要使用AsA_Server。我相信您在Application_Start中拥有的配置代码就是您所需要的。其他配置方法适用于您在NSB自己的进程中托管(作为Windows服务或控制台)。
尝试将DefineEndPointName("AnotherQueue")
作为NServiceBus.Configure.With()
之后的第一个命令。这是我设置它的方式并且它有效,我相信With()之后命令的顺序很重要,并且可以无声地失败(我认为这将在未来的版本中解决)。
根据您要完成的任务,您可能根本不需要单播总线配置。这用于定义客户端端的端点 - 换句话说,用它来定义应用想要与之通信的端点。
最后,在运行Web应用程序时使用调试窗口查找可能出错的线索。 NSB在调试模式下生成许多非常有用的日志信息,所有这些信息都应该发送到调试窗口。可能是您的应用程序没有权限创建队列,或者沿着这些行。一旦我发现了这个问题,就要排除很多“学习曲线问题”的问题。变得容易多了。