delphi - SOAP 服务器无法在某些代理/防火墙后面正常工作

标签 delphi soap proxy windows-7-x64

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

问题:

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

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

提前非常感谢。

最佳答案

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

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

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

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

关于delphi - SOAP 服务器无法在某些代理/防火墙后面正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747496/

相关文章:

delphi - 如何在delphi 2010中将中文字符串转换为十六进制并达到与delphi 2007 mbcs相同的结果

delphi - 有没有人为 Intraweb 编写过 session 监视器?

delphi - 在delphi中从对象检查器中隐藏属性

PHP SOAP 错误捕获

django - 如何从本地主机(http)向django(https)发送POST请求?

python - 无法使用带有 BrowserMob-Proxy 的 Python Selenium 脚本捕获 HAR

android - Delphi XE6 FireMonkey 中的 TVertScrollBox 非常非常慢。使固定?

java - 即使在正确登录后也无法调用任何需要身份验证的操作

java - Android 公共(public) SOAP 调用私有(private) Web 服务器

node.js - “Proxying” 使用 Node.js + Express 2 的大量 HTTP 请求