2012年11月26日

SOAP Interface の引数


SOAPサーバーから、複数のデータセットの内容を戻したいとき、下記のような引数を設定することになるが、

procedure SSGetMstSlave (
                           const AParam: string;
                           out ACdsMst: Variant;
                           out ACdsSlave: Variant ); stdcall;

Variantが複数あるとAccessViolation例外が発生することがある。
この場合、XMLに変換して戻すようにするか、戻り値として独自のクラスを定義する方法がある。

弊社では、
  TRtn2Class = class(TRemotable)
  private
    FRtnCode: Integer;
    FRtnMsg: string;
    FRtnVar1: Variant;
    FRtnVar2: Variant;
  published
    property RtnCode: Integer  read FRtnCode write FRtnCode;
    property RtnMsg:  string   read FRtnMsg write FRtnMsg;
    property RtnVar1: Variant  read FRtnVar1 write FRtnVar1;
    property RtnVar2: Variant  read FRtnVar2 write FRtnVar2;
  end;

のようなクラスを定義している。
(SOAPは独自クラスが定義できる。DelphiのSOAPサーバーインターフェイスの自動生成のサンプルコードにも例がある。)

下記の定義となる
function SSGetMstSlave (
                           const AParam: string ):TRtn2Class ; stdcall;
戻り値として
    FRtnCode  戻り値のコード
    FRtnMsg  エラー等のメッセージ
    FRtnVar1 ACdsMstのデータ
    FRtnVar2 ACdsSlaveのデータ
を設定するようにしている。
posted by しんくそふと at 16:58| Comment(0) | TrackBack(0) | 3層スタイルC/Sアプリ作成術
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/60320194
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック