我有一个用 Delphi XE 编写的 SOAP 服务器/客户端应用程序可以正常工作一段时间,直到用户在公司代理/防火墙后面的 Windows 7 x64 上运行它。应用程序在请求中发送和接收 TSOAPAttachment 对象。
问题:
- 一旦收到并处理了来自该用户的第一个请求,服务器将无法处理此后成功发出的任何请求(来自任何用户)。
- 服务器仍然响应请求,但请求的 SOAPAttachment 在该用户的第一个请求之后似乎已损坏,这就是它无法成功处理请求的原因。
- 将可能的调试日志放到服务器后,我注意到请求参数中的 TSOAPAttachment.SourceStream 变得不可访问(或为空),并且 TSOAPAttachment.CacheFile 也为空。因此,无论何时尝试使用 SourceStream,都会返回 Access Violation 错误。
- 进一步排查发现第一个请求在temp文件夹中生成的BorlandSoapAttachment(n)文件仍然存在并被锁定(正常完成请求后应该删除),后面请求的BorlandSoapAttachment(n+1)文件在堆积向上。
- 重新启动 IIS 或回收应用程序池后,SOAP 服务器将再次工作。
- 可以确定是代理或用户网络造成的,因为当同一台机器在这个网络之外运行时,它会正常工作。
- 为了给问题增添更多神秘感,在同一代理后面的 WinXP 上运行应用程序完全没有问题!
任何帮助或建议都非常感谢,因为我们已经陷入这种情况一段时间了。
提前非常感谢。