我有一些在 IIS 7.5 下运行的 WCF web 服务,它们对 http 请求做出正确响应,但在使用 SSL 调用方法时响应 404(未找到)错误。
该站点的绑定如下:
打电话时http://127.0.0.1:8088/Public/PublicDataService.svc我得到了预期的回应:
您已创建一项服务。
要测试此服务,您需要创建一个客户端并使用它来调用该服务。您可以使用命令行中的 svcutil.exe 工具执行此操作,语法如下:etc
同样,调用任何服务方法都可以,有一个最基本的方法叫做 CanConnect,它只返回“true”
http://127.0.0.1:8088/Public/PublicDataService.svc/CanConnect
真的
当使用 https 时,结果如下。
https://127.0.0.1/Public/PublicDataService.svc
您已创建一项服务。
要测试此服务,您需要创建一个客户端并使用它来调用该服务。您可以使用命令行中的 svcutil.exe 工具执行此操作,语法如下:
https://127.0.0.1/Public/PublicDataService.svc/CanConnect
“/Public”应用程序中的服务器错误。
无法找到该资源。
描述:HTTP 404。您正在寻找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。
请求的 URL:/Public/PublicDataService.svc/CanConnect
版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.6.1055.0
这让我完全困惑了,为什么调用 .svc 可以工作,但其内部方法却给出 404?更令人困惑的是,它本来是可以工作的……事实上,我甚至不确定它什么时候停止的,也就是说,它是否对应于代码发布或服务器补丁等。
该网站的实际配置如下:
Webservices (this is the root of the application / where the Web.Config sits)
- Public (a windows directory, no addition config)
还有许多其他服务直接在根下运行,并且在 http 和 https 下均能正常运行。
对于可能导致此情况的原因,您有什么想法吗?
答案1
事实证明,这只是 web.config 文件中的一个错误。
SO 上的这两个答案是解决方案:
https://stackoverflow.com/a/26581326/1286358
反之亦然
https://stackoverflow.com/a/26539003/1286358
奇怪的是,它曾经在 http 和 https 上工作过,然后就停止了......一定是其他地方发生了一些其他配置更改......
编辑:实际修复完整性
以下内容在 web.config 中从“none”更改为“Transport”
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding>
<security mode="Transport" />