Эта статья о работе с HttpContext.Current может помочь. Ключевым моментом для вас может быть то, что при передаче управления из одного потока в другой HttpContext.Current в новом потоке может быть нулевым.
Вот еще один вопрос/ответ отсюда на SO, который описывает HttpContext.Current имеет значение null в контексте веб-службы. В принятом ответе предлагается включить совместимость с ASP.Net в файле web.config.
Я не знаю ни один из них поможет, но они могли бы. Я нашел их, погуглив «HttpContext.Current is null», что дало довольно много совпадений. Я очень мало занимался разработкой ASP.NET, поэтому не могу комментировать HttpContext.Current, исходя из своего личного опыта.
Учитывая ваш вариант использования, я бы посоветовал вам изучить System.Diagnostics.CorrelationManager.ActivityId.
Одна приятная особенность ActivityId заключается в том, что он «перетекает» из родительских потоков в дочерние потоки (включая потоки пула потоков). Я думаю, что это хорошо работает с задачами и параллельными операциями. Хорошо работает, что означает, что ActivityId, установленный в родительском потоке, имеет ожидаемое значение в дочернем потоке.
Для ActivityId нет LayoutRenderer, но его достаточно легко написать. См. пример (написанный для NLog 1.0) здесь:
Наиболее полезные конфигурации NLog
Я почти уверен, что материал "EstimatedBufferSize" больше не нужен, поэтому, вероятно, сработает что-то вроде:
[LayoutRenderer("ActivityId")]
class ActivityIdLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(Trace.CorrelationManager.ActivityId);
}
}
Если вы пойдете по этому пути, вы можете рассмотреть возможность добавления свойства Format в ActivityIdLayoutRenderer, чтобы позволить вам указать формат guid. Смотрите этот ответ (от меня). Он содержит много полезной информации о работе с гидами.
NewGuid vs System.Guid.NewGuid().ToString(D);< /а>
См. этот исходный файл (в git-репозитории NLog) для примера того, как вы можете реализовать и использовать такое свойство Format:
https://github.com/NLog/NLog/blob/master/src/NLog/LayoutRenderers/GuidLayoutRenderer.cs
person
wageoghe
schedule
24.02.2014