2

我有一个用 Delphi XE 编写的 SOAP 服务器/客户端应用程序可以正常工作一段时间,直到用户在公司代理/防火墙后面的 Windows 7 x64 上运行它。应用程序在请求中发送和接收 TSOAPAttachment 对象。

问题:

  • 一旦收到并处理了来自该用户的第一个请求,服务器将无法处理此后成功发出的任何请求(来自任何用户)。
  • 服务器仍然响应请求,但请求的 SOAPAttachment 在该用户的第一个请求之后似乎已损坏,这就是它无法成功处理请求的原因。
  • 将可能的调试日志放到服务器后,我注意到请求参数中的 TSOAPAttachment.SourceStream 变得不可访问(或为空),并且 TSOAPAttachment.CacheFile 也为空。因此,无论何时尝试使用 SourceStream,都会返回 Access Violation 错误。
  • 进一步排查发现第一个请求在temp文件夹中生成的BorlandSoapAttachment(n)文件仍然存在并被锁定(正常完成请求后应该删除),后面请求的BorlandSoapAttachment(n+1)文件在堆积向上。
  • 重新启动 IIS 或回收应用程序池后,SOAP 服务器将再次工作。
  • 可以确定是代理或用户网络造成的,因为当同一台机器在这个网络之外运行时,它会正常工作。
  • 为了给问题增添更多神秘感,在同一代理后面的 WinXP 上运行应用程序完全没有问题!

任何帮助或建议都非常感谢,因为我们已经陷入这种情况一段时间了。

提前非常感谢。

4

2 回答 2

1

如果您确实确定已调试处理附件的所有服务器逻辑以尝试发现任何可能在 Windows 7 上特别失败的代码,我建议:

1) 使用一些网络嗅探器Wireshark 很适合这个任务,用相同的数据/参数值发出两个后续请求,并比较 HTTP 内容。这种分析应该在客户端(查看数据是否总是以相同的内容离开客户端机器)和服务器中完成,以分析传入的数据;

2)我过去也遇到过类似的情况,我试图真正理解这个问题并没有成功。我确实解决了将文件作为 Base64 编码字符串参数发送的问题,而不是使用 SOAP 附件。使用 Base64 的副作用是要发送的数据大小增加了约 30%,如果您正在传输大文件,这可能会很重要。

请记住,SOAP 附件会在服务器中创建临时文件,并且 Windows 7 的文件访问规则与 Windows XP 不同。我不知道这是否可以解释第一个呼叫正在处理而其他呼叫不能解释,但也许有一些与文件访问有关的东西。

于 2012-05-25T02:58:30.713 回答
1

可能是Win 7下的UAC(用户访问控制)问题。尝试在win 7“以管理员身份”运行客户端,看看是否正常。

于 2012-05-25T13:17:39.243 回答