別のSOAPの問題を解決しているときにこの問題を見つけたので、ここに投稿して、誰かがそれを経験したか、何か推奨事項があるかどうかを確認してください。
問題:
- SOAP サーバーは、存在しないメソッドが呼び出された後、TSOAPAttachment オブジェクトを受け取るメソッドを処理しません。
- 存在しないメソッドが呼び出された後、TSOAPAttachment.SourceStream にアクセスできなくなり、TSOAPAttachment.CachFile が空になります。
- 問題が発生すると、BorlandSoapAttachment(n) 一時ファイルがロックされ、積み重なっていきます。
- IIS の再起動またはアプリケーション プールのリサイクル後に通常に戻る
この問題を作成する手順:
- 最初に 3 つのメソッドを持つ単純な Soap クライアント/サーバー アプリケーションを作成します。そのうちの 1 つは TSOAPAttachment を受け取って返す必要があり、残りの 2 つは 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 つのメソッドすべてを呼び出します。
- この時点で、すべてがうまく機能するはずです。クライアントは 3 つのメソッドすべてを呼び出すことができ、サーバーはこれらすべてに正常に応答できます。
ここで、サーバーの Subtract 関数を削除しますが、元のクライアントを引き続き使用します。
- Add と TestRequest の両方を呼び出すと、引き続き正常に完了します。
- ただし、存在しない Subtract 関数を呼び出した後、TestRequest は機能しなくなりますが、Add 関数は引き続き機能します。
- TestRequest には、上で説明したすべての問題があります。サーバーは引き続き応答しますが、TSOAPAttachment オブジェクトにアクセスできません。
アドバイスをいただければ幸いです。