Допустим, у меня есть служба, которая вызывает множество других служб через шлюз. Отправка:
public class SomeService : Service {
public SomeServiceResponse Any (SomeServiceRequest request) {
var response1 = Gateway.Send<AnotherServiceResponse> (new AnotherServiceRequest());
var response2 = Gateway.Send<YetAnotherServiceResponse> (new YetAnotherServiceRequest());
var response3 = Gateway.Send<LastServiceResponse> (new LastServiceResponse());
}
}
В этом случае пользовательский IRequestLogger, который я зарегистрировал при запуске, будет вызывать свой метод Log () только один раз при вызове первого Gateway.Send ().
После просмотра кода стека службы и проверки объекта Request (запрос ASP.NET) - кажется, что после первого журнала добавляется флаг _logged, что предотвращает вход в систему других вызовов шлюза.
Какое решение было бы предпочтительным, чтобы Service Stack действительно регистрировал все эти вызовы?
Я временно добавил это в метод лога RequestLogger:
public void Log(IRequest request, object requestDto, object response, TimeSpan elapsed)
{
(...)
// service stack sets a flag on parent request that logged once.. clear it to support multiple service calls
if (request.Items.ContainsKey(Keywords.HasLogged)){
request.Items.Remove(Keywords.HasLogged);
}
}
Тем не менее, это выглядит несколько странно ... например почему этот флаг вообще там?
(я использую старую версию SS (5.0.2), но я замечаю, что код ServiceRunner, который устанавливает флаг, также присутствует в последней версии)