J'ai un rapport qui appelle le service métier via l'appel de méthode Masstransit IRequestClient.Request.Appel Masstransit IRequestClient.Request à partir du blocage de travail Quartz
Si ce rapport est généré à partir de l'interface utilisateur (contrôleur ASP.NET MVC), tout fonctionne, mais si le même rapport est généré à partir de la méthode de travail Quartz .net, l'appel ne revient jamais.
exemple de code est ici:
//client is an instance of MessageRequestClient class
var response = await client.Request(new GetEntityCommand
{
Ids = ids,
ExcludeDeleted = excludeDeleted
}).ConfigureAwait(false);
Code de la consommation:
public class GetEntityCommandConsumer : IConsumer<IGetEntityCommand>
{
private readonly IEntityService _entityService;
public GetEntityCommandConsumer(IEntityService entityService)
{
_entityService= entityService;
}
public Task Consume(ConsumeContext<IGetEntityCommand> context)
{
var ids = context.Message.Ids;
var entities = _entityService.GetAll(ids, context.Message.ExcludeDeleted); //database NHibernate call
var result =
context.RespondAsync(new GetEntityCommandResponse
{
Success = true,
Entities = entities.Select(x => x.ToDTO).ToList()
});
return result;
}
}
Serait bien de voir le code de la consommation aussi bien. –
Ajout d'un code de consommateur au message racine. Le code du consommateur réside dans l'application console. Le débogueur montre que le consommateur a été appelé. Il semble que MT ait besoin d'un thread pour renvoyer les résultats de la tâche, mais il est bloqué par un autre code. –
Avez-vous essayé de rendre la méthode consume async et au lieu de retourner la tâche, appelez 'await context.RespondAsync (...)'? –