クライアント アプリケーションでのヘッダーの処理
Web サービスのクライアントの記述 への移動
呼び出そうとしている Web サービス アプリケーションで、クライアントからの要求に何かヘッダーが含まれていることになっている場合や、応答メッセージに特別なヘッダーが含まれている場合、クライアント アプリケーションには、それらのヘッダーに対応するヘッダー クラスの定義が必要になります。 Web サービス アプリケーションを記述する WSDL ドキュメントをインポートすると、インポータによって、これらのヘッダー クラスを宣言するコードが自動的に生成され、それらのクラスがリモート可能型レジストリに登録されます。 サーバーが Delphi で作成されている場合は、WSDL ファイルのインポートで生成されるファイルではなく、サーバー アプリケーションでこれらのヘッダー クラスの定義および登録に使用されるのと同じユニットを使用できます。 ユニットでは、呼び出し可能なインターフェイスの登録時に、必ず同じ名前空間 URI および SOAPAction ヘッダーを使用するようにしてください。 これらの値は、インターフェイスを登録するコードに明示的に指定することもできますし、自動的に生成することもできます。 自動生成の場合、インターフェイスを定義するユニットはクライアントとサーバーのいずれも同じ名前とし、クライアントとサーバーの両方でグローバル変数 AppSpacePrefix に同じ値を定義してください。
メモ: ヘッダー クラスについての詳細は、「SOAP ヘッダーの定義と使用」を参照してください。
サーバーとの場合、クライアント アプリケーションは Soap.InvokeRegistry.ISOAPHeaders インターフェイスを使用して、入力ヘッダーにアクセスし、出力ヘッダーを追加します。呼び出し可能なインターフェイスの呼び出しに使用するリモート インターフェイス オブジェクトは、ISOAPHeaders インターフェイスを実装します。 ただし、ISOAPHeaders インターフェイスをリモート インターフェイス オブジェクトから直接取得することはできません。 その理由は、リモート インターフェイス オブジェクトからインターフェイスを直接取得しようとすると、そのインターフェイスが呼び出し可能なインターフェイスであると仮定して、インメモリ vtable が生成されるからです。 したがって、リモート インターフェイス オブジェクトからではなく、呼び出し可能なインターフェイスから ISOAPHeaders インターフェイスを取得する必要があります。
var
Service: IMyService;
Hdr: TAuthHeader;
Val: Double;
begin
Service := HTTPRIO1 as IService;
Hdr := TAUthHeader.Create;
try
Hdr.Name := "Frank Borland";
Hdr.Password := "SuperDelphi";
(Service as ISOAPHeaders).Send(Hdr); { add the header to outgoing message }
Val := Service.GetQuote("BORL"); { invoke the service }
finally
Hdr.Free;
end;
end;
認証を使用した例
この例は、https://www.geosvc.com/ にある郵便番号検索サービス用です。詳細については、http://api.geosvc.com/ZipCodeLookup.asmx にアクセスしてください。
procedure TForm1.Button1Click(Sender: TObject);
var
WS: GeoPlacesSoap; // web service interface; uses placelookup
Token: AuthenticationHeader; // soap header
begin
Token := nil;
WS := GetGeoPlacesSoap;
try
Token := AuthenticationHeader.Create;
Token.SessionID := 'myregistrationidentifier';
(WS as ISOAPHeaders).Send(Token);
WS.GetPlacesWithin('94558', 'CA', 25, City);
finally
FreeAndNil(Token);
end;
end;
説明と詳細なソース コードについては、EDN で公開されている Bob Swart のビデオをご覧ください: http://edn.embarcadero.com/article/41013 - 『Delphi SOAP Web Services and Security(Delphi による SOAP Web サービスとセキュリティ)』(英語版)