我们目前正在将 WCF 服务从 IIS 6 迁移到 IIS 7。该服务包含一些用于内部流传输的非 SSL 端点和一些使用 SSL 保护的公开端点。
使用 wsHttpBinding 和安全模式="TransportWithMessageCredential" 实现公共的安全端点。绑定内容如下:
<wsHttpBinding>
<binding name="CustomSecurityBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
凭据根据自定义用户存储库进行身份验证以进行验证。
将服务部署到 IIS 7(64 位 Win2k8)后,所有服务(basicHttpBindings)都正确响应,除了 wsHttpBindings。如果使用 https 触发,我们总是会收到 HTTP 400 状态代码(错误请求)。
在 IIS 中启用跟踪后,我们可以缩小问题的范围,尽管来自跟踪的消息并没有真正帮助:
MODULE_SET_RESPONSE_ERROR_STATUS Warning
ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER",
HttpStatus="400", HttpReason="Bad Request", HttpSubStatus="0", ErrorCode="Der
Vorgang wurde erfolgreich beendet. (0x0)", ConfigExceptionInfo=""
到目前为止完成的步骤:
- 在 IIS 7 中重新安装 WCF 扩展 (ServiceModelReg.exe -r -y)
- 为主机启用 https 协议,向主机添加自签名证书
- 在 wcf 配置中使用 dns/identity 设置
- 向 wcf 服务配置添加基地址
经过 2 小时的谷歌搜索并尝试完成这项工作,我最后希望您能求助:有人知道 IIS 7 的这种奇怪行为吗?