WCF IIS Web 服务奇怪的间歇性结果
Posted
技术标签:
【中文标题】WCF IIS Web 服务奇怪的间歇性结果【英文标题】:WCF IIS Web Service Strange Intermittent Results 【发布时间】: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。
我看不出请求失败的原因。任何人都有这方面的经验或任何建议是什么导致它失败?
【问题讨论】:
***.com/questions/27725258/… 端口 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 【参考方案1】:在关注 Lex Li 对另一个溢出问题的引用后,我发现了如何获取更详细的错误消息。这是我发现的错误信息:
System.Runtime.Serialization.SerializationException: 转换为 UTC 时大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法序列化为 JSON。 System.ArgumentOutOfRangeException: 指定的参数超出了有效值的范围。
我调用的方法返回一个集合列表。此列表中的字段之一是 DateTime(不是 DateTime?),并且代码未填充此字段,这导致 datetime 值无效且无法序列化为 JSON。
我认为我之前没有遇到此错误的原因是因为我通过使用 XML 而不是 JSON 的 C# 客户端生成的代理使用 Web 服务。
【讨论】:
以上是关于WCF IIS Web 服务奇怪的间歇性结果的主要内容,如果未能解决你的问题,请参考以下文章
Restful WCF IIS 7.5 405 方法不允许间歇
使用 wcf 对 sql server 运行查询时出现奇怪的错误