1

这是自从我开始将 OData 用于我的移动应用程序以来遇到的最奇怪的问题之一。我开发的 OData 服务器由 SQL Express 2008 提供支持,在过去 15 个月中,这种组合已安装在 50 台不同的服务器和/或 PC 上。50台服务器运行稳定,海量数据功能一致。

几天前,我的一个客户联系我,说我的客户端应用程序(在 iOS7 上运行)在将数据发布到他们的服务器时出现了一个奇怪的错误。该错误的 HTTP 代码为 400,错误文本为“无法完成操作。(超时错误 400。)”。我的第一个问题是:为什么超时错误会返回 400 代码?通常,当我超时(由于防火墙等)时,它们在 100 倍范围内。服务器上的事件日志中没有任何迹象表明发生了任何问题。我自己的日志(存储在 SQL 数据库中)没有显示错误(这很奇怪,因为我在 OData 服务中使用通用异常捕获方法来记录任何问题)。我还没有到添加所有请求的日志记录的步骤。

仅在发布一组特定数据时才会引发该错误。该设备的所有其他帖子都运行良好。我让客户端重新安装应用程序(删除所有数据),然后下载导致错误的数据集。下载工作正常。我们开始对数据进行更改,以复制增量更改中发生错误时数据的样子,将更改发布到服务器并观察结果。大多数增量更改工作正常,但某些组合会导致错误发生。其中一个增量涉及大量更改并且可以正常发布,但是任何对象的后续更改(有时更改文本字段中的 6 个字符)都会导致错误发生。

我从服务器上擦除了服务组件并进行了全新安装。我转移了 TCP 端口以防 443 有另一个侦听器导致问题。我重置了服务器。这些都不会改变错误的行为。

我最后的解决方案是完全重新安装 IIS 和 .NET Framework,但我显然想避免这种情况,因为它不是我的服务器……服务器在我当前位置的海外,所以调试不是一个真正的选择。希望有人知道我可以通过诊断做什么来尝试确定这个奇怪的“小精灵”的来源。

4

1 回答 1

0

您是否尝试过使用 Fiddler 之类的工具进行更彻底的流量分析?“超时”错误确实看起来很奇怪,您发布的内容是您的服务器在“海外”。是否存在正在使用/生成的“时间”,例如服务器时间、本地时间等?

只是为了确认,“相同”的确切数据集总是失败?您可以通过远程调试器或本地主机复制它吗?如果是这样,您可以打开“详细错误”吗?

于 2013-10-31T04:35:44.807 回答