WCF REST .NET-приложение CallContext
У меня есть приложение WCF REST, работающее в IIS. Я использую.NET 4.6.2.
Я использую библиотеку, которая сохраняет информацию в CallContext
будет использоваться позже на протяжении всего запроса. Метод должен быть вызван в global.asax
Application_BeginRequest
,
public class Global : HttpApplication
{
/// <summary>
/// Begins the application request.
/// </summary>
void Application_BeginRequest(object sender, EventArgs e)
{
CallContext.LogicalSetData("MyEntity", (object) entity);
}
}
Позже в моем контракте WCF REST, когда я вызываю библиотечный метод, который должен получить объект, который был сохранен в CallContext
, это больше не доступно.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public partial class ServiceContract
{
[OperationContract]
[WebGet(UriTemplate = "Test")]
public string Test()
{
var entity = CallContext.LogicalGetData("MyEntity");
// entity is null here
return "Test";
}
}
CallContext
используется под капотом библиотекой, которую я должен использовать в своем приложении, поэтому я не могу изменить ее на HttpContext.Current.Items
например, чтобы передать эти переменные. Есть ли причина, почему CallContext
теряется при поступлении запроса в службу WCF? Если я попытаюсь получить это от Application_EndRequest
, это все еще доступно.
void Application_EndRequest(object sender, EventArgs e)
{
var entity = CallContext.LogicalGetData("MyEntity");
// entity is fine here
}