Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF自定义HTTP头已添加到服务器响应中,但未从服务器返回_Http_Wcf_Http Headers_Filtering_Custom Headers - Fatal编程技术网

WCF自定义HTTP头已添加到服务器响应中,但未从服务器返回

WCF自定义HTTP头已添加到服务器响应中,但未从服务器返回,http,wcf,http-headers,filtering,custom-headers,Http,Wcf,Http Headers,Filtering,Custom Headers,我希望所有WCF服务调用都返回CallDuration自定义HTTP头 在服务器上有一个IDispatchMessageInspector实现,该实现具有以下BeforeSendReply实现: public void BeforeSendReply(ref Message reply, object correlationState) { // ... calculate CallDuration etc. ... // send CallDuration WebOperation

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

在服务器上有一个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头保持不变。

不要使用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验证标题的添加


您是否尝试过在不使用
的情况下访问调用
.Headers
在前面的步骤中调用,并且仅在那里使用
?。
如果由于某种原因左侧为null,操作将停止执行,并且不会导致任何错误。您好,是的,我已经在调试器中验证了没有子表达式为null-elvis运算符只是作为额外的,可能是多余的安全性存在。如果这对我有效,我对你深表感激,并给予你谦逊的赏金-我会尽快检查的!它就像一个符咒。赏金来之不易。非常感谢。