1

別の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 オブジェクトにアクセスできません。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

以前は SOAP を使用していましたが、Delphi ではなく Java から使用しました。しかし、SOAP はどこにでもあるので問題ありません。SOAP 仕様に従わなければなりません。SOAP サーバーは、公開されたメソッドに直面しない SOAP 要求からの応答として SOAP エラーを返す必要があります。Delphi SOAP サーバーは SOAP エラーを生成し、Delphi SOAP クライアントはエラーを適切に処理する必要があります。TCP トラフィック モニタを使用してフィルタを割り当て、SOAP トラフィックのみを表示するか、SOAP トラフィック モニタを使用することができます。モニターを使用すると、サーバーに送信された要求 (メッセージを含む) と応答も確認できます。SOAP 仕様に関する W3C オンライン ドキュメントを参照できます。結局のところ、SOAP アプリケーションは仕様に従う必要があります。

于 2012-05-25T04:06:57.683 に答える