CallContext Пусто в IDispatchMessageInspector для.NET 4.5 WCF Асинхронные конечные точки

TL;DR

Данные, хранящиеся в CallContext, больше не доступны к тому времени, когда достигается метод BeforeSendReply для IDF-класса WCis IDispatchMessageInspector. Это влияет только на асинхронные конечные точки.

Почему это? Есть ли способ преодолеть это?

Более длинная версия

Мы используем сервис-ориентированную архитектуру, и нам необходимо передать конкретные данные (например, идентификатор, сгенерированный для первоначального запроса) через путешествие, которое включает в себя несколько служб WCF. После того, как эти данные передаются следующему сервису через заголовки, они затем сохраняются в CallContext, чтобы мы не потеряли их, если во время асинхронного вызова произойдет переключение потока.

Для разрабатываемой в настоящее время асинхронной службы WCF, размещенной на IIS, мы хотим иметь возможность регистрировать ответы SOAP для будущих целей отладки. Однако данные, ранее сохраненные в CallContext, теряются к моменту достижения метода BeforeSendReply поведения службы IDispatchMessageInspector. Когда я изменяю конечную точку на не асинхронный метод, тогда данные не теряются из CallContext.

Мы используем.NET 4.5 (хотя я пытался обновиться до.NET 4.7.1 и хранить данные в AsyncLocal).

0 ответов

Другие вопросы по тегам