2014-11-11 3 views
0

При подключении существующей веб-службы для обработки MQMessage я хотел бы иметь возможность сериализовать сообщение в базе данных, прежде чем он превратится в объект запроса и передан в конечную точку службы. Как я могу это сделать, учитывая этот код в моем файле apphost?Как регистрировать сообщение MQ Message перед его преобразованием в DTO?

var mqServer = container.Resolve<IMessageService>(); 
//todo: would like to log the message here, instead of the Service, or Global filter 
mqServer.RegisterHandler<LeadInformation>(ServiceController.ExecuteMessage);   
mqServer.Start(); 

Update

Это то, что я был в надежде реализовать

var mqServer = container.Resolve<IMessageService>(); 
mqServer.RegisterHandler<LeadInformation>(m => 
{ 
    var db = container.Resolve<IFrontEndRepository>(); 
    db.SaveMessage(m as Message); 
    return ServiceController.ExecuteMessage(m); 
});   
mqServer.Start(); 

Существуют ли какие-либо недостатки в этом?

Спасибо, Стефану

ответ

1

Вы можете сохранить сообщение в RegisterHandler

mqServer.RegisterHandler<LeadInformation>(m => 
{ 
    var db = container.Resolve<IFrontEndRepository>(); 
    db.SaveMessage(m as Message); 
    return ServiceController.ExecuteMessage(m); 
});   

Или, если вы предпочитаете, используя RequestFilter:

mqServer.RequestFilter = m => 
{ 
    var db = container.Resolve<IFrontEndRepository>(); 
    db.SaveMessage(m as Message); 
    return m; 
});   
+0

Использование AppSelfHostBase, кажется, не может чтобы получить RequestFilter для компиляции. –

+1

Если вы не используете конкретный тип, вам нужно его бросить, например: '((RabbitMqServer) mqServer) .RequestFilter = ...;' – mythz

Смежные вопросы