【问题标题】:WCF IIS Web Service Strange Intermittent ResultsWCF IIS Web 服务奇怪的间歇性结果
【发布时间】: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 的方法,我收到一条错误消息“Could not get any response”。 Chrome 错误提示:“无法访问此站点。找不到 www.blah.com 的服务器 IP 地址。”

似乎没有防火墙问题,身份验证或 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。

我看不出请求失败的原因。任何人都有这方面的经验或任何建议是什么导致它失败?

【问题讨论】:

标签: c# wcf iis windows-server-2019


【解决方案1】:

在关注 Lex Li 对另一个溢出问题的引用后,我发现了如何获取更详细的错误消息。这是我发现的错误信息:

System.Runtime.Serialization.SerializationException: 转换为 UTC 时大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法序列化为 JSON。 System.ArgumentOutOfRangeException: 指定的参数超出了有效值的范围。

我调用的方法返回一个集合列表。此列表中的字段之一是 DateTime(不是 DateTime?),并且代码未填充此字段,这导致 datetime 值无效且无法序列化为 JSON。

我认为我之前没有遇到此错误的原因是因为我通过使用 XML 而不是 JSON 的 C# 客户端生成的代理使用 Web 服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多