WCF 作为 Windows 服务托管 - 自定义 HTTP 标头未反映在响应标头上

Posted

技术标签:

【中文标题】WCF 作为 Windows 服务托管 - 自定义 HTTP 标头未反映在响应标头上【英文标题】:WCF hosted as Windows service - Custom HTTP header is not reflecting on Response header 【发布时间】:2021-08-03 13:00:25 【问题描述】:

我有一个独立的 C# WCF 服务作为 Windows 服务运行。我需要在所有响应中添加自定义标头,例如“X-Xss-Protection”。我已尝试在 app.config 文件中使用以下脚本,但这不会向响应中添加任何 HTTP 标头。

    <system.webServer>
            <httpProtocol>
                <customHeaders>
                    <remove name="X-Powered-By"/>
                    <remove name="X-AspNet-Version"/>
                    <remove name="HTTPServer"/>
                    <remove name="Microsoft-IIS"/>
                    <add name="Strick-Transport-Security" value="max-age=31536000;includeSubDomains"/>
                    <add name="Content-Security-Policy" value="script-src 'unsafe-eval' https://www.google.com 'self' 'unsafe-inline'"/>
                    <add name="X-Xss-Protection" value="1; mode=block"/>
                    <add name="Feature-Policy" value="geolocation 'none'"/>
                    <add name="Cache-Control" value="no-cache, no-store, must-revalidate, pre-check=0, post-check=0, max-age=0, s-maxage=0"/>
                    <add name="Pragma" value="no-cache"/>
                    <add name="Expires" value="0"/>
                </customHeaders>
            </httpProtocol>
        </system.webServer>

【问题讨论】:

之前好像有人问过这个问题,请参考这里的答案***.com/a/1408177/3559462 感谢您的评论,@Vikas。对我来说 IDispatchMessageInspector.BeforeSendReply 方法不会自动调用。知道可能是什么原因吗? 【参考方案1】:

通过IDispatchMessageInspector.BeforeSendReply方法无法成功插入header的原因可能是你没有在接口上方添加[CustomBehavior]标签。

像这样添加标签:

[CustomBehavior]
Public interface IService

【讨论】:

感谢@Theobald Du 的输入。以下是我正在使用的接口,都是预定义的。您能否提供代码 sn-p 是可能的? IClientMessageInspector 和 IDispatchMessageInspector 可以参考:***.com/questions/66830864/…

以上是关于WCF 作为 Windows 服务托管 - 自定义 HTTP 标头未反映在响应标头上的主要内容,如果未能解决你的问题,请参考以下文章

选择使用 IIS 进行 WCF 服务托管或使用 Windows 服务进行自托管

我可以在 Windows 服务中托管(自托管)WCF 服务并通过 http 公开它吗?

自托管 WCF 服务和 basicHttpBinding:绑定不提供表示调用者的 Windows 标识

当 WCF 应用程序在 Windows 7 上作为 Windows 服务托管时,找不到证书

在作为 Windows 服务托管的 WCF 类库项目中使用 SqlDependency

WCF 和自定义身份验证(用户名/密码)