的Web应用程序订阅事件,但不处理它们

问题描述:

我的Web程序发送命令到域,并处理事件(通过SIgnalR推到浏览器)。它是在IIS快递/ Win7的X64的Web应用程序订阅事件,但不处理它们

在随机运行ASP.NET MVC3和.NET 4,有时从一开始就正确的,它决定停止分发事件处理我。这些事件位于Web端点的日记队列中,但没有其他跟踪。他们从日志完全,我在处理程序断点从不打缺,并且两个端点和错误队列为空。

 Func<Type, bool> isMessage = t => typeof(IMessage).IsAssignableFrom(t); 
     Func<Type, bool> isCommand = t => typeof(ICommand).IsAssignableFrom(t); 
     Func<Type, bool> isEvent = t => typeof(IEvent).IsAssignableFrom(t); 


     Configure.WithWeb() 
      .NinjectBuilder(Kernel) 
      .DefineEndpointName("Hospital.Web") 
      .DefiningMessagesAs(isMessage) 
      .DefiningCommandsAs(isCommand) 
      .DefiningEventsAs(isEvent) 
      .Log4Net() 
      .JsonSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .PurgeOnStartup(true) 
      .CreateBus() 
      .Start(); 

这里是我的web.config的NSB部分:

<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" /> 
<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Hospital.Commands" Endpoint="Hospital.CommandHandlers" /> 
     <add Messages="Hospital.Events" Endpoint="Hospital.CommandHandlers" /> 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

这里是我的处理程序之一:

public class StatsHandler : 
    IHandleMessages<PatientAdmitted>, 
    IHandleMessages<BedAssigned>, 
    IHandleMessages<PatientDischarged> 
{ 

    private static readonly ILog Log = LogManager.GetLogger(typeof (StatsHandler)); 

    private readonly IConnectionManager _connectionManager; 

    public StatsHandler(IConnectionManager connectionManager) 
    { 
     _connectionManager = connectionManager; 
    } 

    protected dynamic Clients 
    { 
     get { return _connectionManager.GetClients<StatsHub>(); } 
    } 


    public void Handle(PatientAdmitted message) 
    { 
     Log.DebugFormat("Admitted {0} {1}", message.FirstName, message.LastName); 
     Clients.patientAdmitted(); 
    } 

    public void Handle(BedAssigned message) 
    { 
     Log.DebugFormat("Assigned {0} to {1}", message.PatientId, message.Bed); 
     Clients.bedAssigned(); 
    } 

    public void Handle(PatientDischarged message) 
    { 
     Log.DebugFormat("Discharged {0}", message.PatientId); 
     Clients.patientDischarged(); 
    } 
} 

我也asked this question in the NServiceBus group。该消息附有一个日志文件。

有在RC4一个错误,可能导致此行为,你可以尝试RC5并看看是否有帮助?

+0

感谢安德烈亚斯。我今晚会试一试。 – 2012-02-22 15:04:23

+0

修复了它。谢谢! – 2012-02-23 15:35:41