Пользовательский HTTP-заголовок WCF добавлен в ответ сервера, но не возвращен с сервера
Я хочу, чтобы все вызовы службы WCF возвращали настраиваемый заголовок HTTP CallDuration.
На сервере есть реализация IDispatchMessageInspector с этой реализацией BeforeSendReply:
public void BeforeSendReply(ref Message reply, object correlationState)
{
// ... calculate CallDuration etc. ...
// send CallDuration
WebOperationContext.Current?.OutgoingResponse?.Headers.Add("CallDuration", $"{duration.TotalSeconds}");
}
Это должно добавить CallDuration как пользовательский заголовок HTTP ко всем ответам WCF. Однако это не так.
Каковы возможные фильтры, которые могли бы препятствовать тому, чтобы пользовательский заголовок HTTP достигал клиента? Другие заголовки HTTP остаются нетронутыми.
1 ответ
Решение
Вместо использования WebOperationContext добавьте заголовок к ответу:
public void BeforeSendReply(ref Message reply, object correlationState)
{
//assumes "duration" is a variable initialized in AfterReceiveRequest, containing the time in ticks at that moment
long callDuration = DateTime.Now.Ticks - duration;
HttpResponseMessageProperty prop;
if (reply.Properties.ContainsKey(HttpResponseMessageProperty.Name))
{
prop = (HttpResponseMessageProperty)reply.Properties[HttpResponseMessageProperty.Name];
}
else
{
prop = new HttpResponseMessageProperty();
reply.Properties.Add(HttpResponseMessageProperty.Name, prop);
}
prop.Headers.Add("CallDuration", callDuration.ToString());
}
Добавление заголовка можно проверить с помощью SoapUI