我在解决另一个 SOAP 问题时发现了这个问题,并在此处发布以查看是否有人遇到过它或有任何建议。
问题:
- 调用不存在的方法后,SOAP 服务器将不会处理接收 TSOAPAttachment 对象的方法。
- 在调用不存在的方法后,TSOAPAttachment.SourceStream 变得不可访问并且 TSOAPAttachment.CachFile 为空
- BorlandSoapAttachment(n) 临时文件被锁定并在问题发生时堆积起来。
- 重启IIS或回收App Pool后恢复正常
创建此问题的步骤:
- 最初使用 3 个方法创建一个简单的 Soap 客户端/服务器应用程序,其中一个应该接收并返回一个 TSOAPAttachment,另外两个可以是任何东西,int 或 string。
- 我其实是按照这篇文章http://blogs.embarcadero.com/pawelglowacki/2008/12/18/38624创建了简单的soap应用程序,只是添加了一个接收和返回TSOAPAttachment的方法。所以我的界面是这样的:
代码
TSimpleCalculator = class(TInvokableClass, ISoapCalculator)
private
public
function add(a, b: Integer) : Integer; stdcall;
function subtract(a, b: Integer): Integer; stdcall;
function TestRequest(const Request: TSOAPAttachment): TSOAPAttachment; stdcall;
end;
- 创建此 Soap 服务器的客户端以调用所有三个方法。
- 在这一点上,一切都应该愉快地工作,即。客户端可以调用所有 3 种方法,服务器可以成功响应所有这些方法。
现在,我删除了服务器中的 Subtract 函数,但仍然使用原始客户端。
- 调用 Add 和 TestRequest 仍然成功完成。
- 但是,在我调用不存在的 Subtract 函数后,TestRequest 将不再起作用,但 Add 函数仍然起作用。
- TestRequest 将有我上面描述的所有问题,即。服务器仍然响应它,但它无法访问 TSOAPAttachment 对象。
任何建议表示赞赏。