2

我希望所有 WCF 服务调用都返回一个 CallDuration 自定义 HTTP 标头。

在服务器上有一个带有此 BeforeSendReply 实现的 IDispatchMessageInspector 实现:

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 标头保持不变。

4

1 回答 1

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 验证标题的添加

通话时长

于 2018-08-04T13:31:01.700 回答