【发布时间】:2021-01-27 19:04:09
【问题描述】:
我正在将 IIS 中托管的 WCF Web 服务从旧服务器迁移到新服务器。
在新服务器(Windows 2019)上,我执行了以下步骤:
- 在 IIS 中创建网站和应用程序池
- 已安装 SSL 证书
- 添加了站点绑定(http 和 https)
- 已将项目文件(DLL、SVC、Web.Config)复制到文件夹中
该文件夹位于 inetpub/wwwroot 下。
旧服务器上的 Web 服务工作正常,唯一的区别是新服务器的域名和 IP 地址不同。
我可以通过调用 https://www.example.com/TestConnect.svc/basic?singleWsdl 来获取 mex 元数据
当我使用 Postman(或 Chrome)测试服务时,我得到了奇怪的结果。调用其中一种方法会返回正确的结果(整数值)。然后我调用另一个应该返回 List
似乎没有防火墙问题,身份验证或 SSL 证书也没有问题,因为成功的调用通过 https 返回结果并使用用户名和密码进行身份验证。
我可以在IIS日志中看到成功的请求如下:
GET /TestConnect.svc/json/GetNoteCount token=blahblah 443 TestAPI xxx.xxx.xxx.xxx PostmanRuntime/7.24.1 - 200 0 0 844
每个 Web 请求都应显示在 IIS 日志中,但如果没有,则该请求可能从未到达 IIS。知道传入服务器的请求首先通过 HTTP.SYS 路由,然后再移交给 IIS,我检查了 C:\Windows\System32\LogFiles\ 中的 HTTPERR 日志HTTPERR
果然失败的请求不在IIS日志中而是在HTTPERR中如下:
2020-10-13 11:11:55 xxx.xxx.xxx.xxx 61134 xxx.x.xx.xxx 443 HTTP/1.1 GET /TestConnect.svc/json/GetNotes?token=blah&search=banking - - 3 Request_Cancelled TestAPI
“s-reason”列显示 Request_Cancelled。
我看不出请求失败的原因。任何人都有这方面的经验或任何建议是什么导致它失败?
【问题讨论】:
-
端口 443 是 HTTP(非安全)而不是 HTTPS(安全)。如果您使用的是证书而不是使用带有 TLS 身份验证的 HTTPS。请关注以下帮助:docs.microsoft.com/en-us/dotnet/framework/network-programming/…。使用嗅探器验证您使用的是 TLS 1.2/1.3(不是 1.0/1.1)。
-
@jdweng 你在说什么?端口 443 用于 HTTPS。 HTTP 在端口 80 上。
-
我正在查看在注释中隐藏 HTTPS 的 WIKI 文章:en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
标签: c# wcf iis windows-server-2019