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 服务托管时,找不到证书