Delphi のインポータを使用した場合は、Web サービスとそれに対応する .xml ファイルWSDL
を表すために必要なクラスが生成されます。request
SOAP
response
wrapper
また、実際に呼び出しを行うために使用するも生成されます。通常、次のようないくつかのメソッドがあります。
function mySoapMethod(myRequest: TmyRequestType): TMyResponse;
電話をかけるには、基本的に次のようにします。
wrapper
インスタンス参照を取得します。に似たものと呼ばれるメソッドがユニットにあるはずGetWrapper
です。
- 必要に応じて、 のインスタンスを作成し、
request type
そのすべてのプロパティを設定します。SOAP
メソッドがパラメーターとしていくつかの基本的な型を必要とするだけの場合、リクエストクラス自体が存在しない可能性があります。request type
また、非常に複雑な場合は、オブジェクトのインスタンスを作成し、それらをプロパティとしてリクエストに割り当てる必要があることを暗示する可能性があることも考慮してください。
- 対応する を使用し
wrapper method
てリクエストを送信します (単純な呼び出しの場合はパラメーターを設定します)。
response
オブジェクトを受け取り、必要に応じて操作します。
擬似コードでは、次のようになります。
myWrapper := GetMyWrapper();
myRequest := TMyRequest.Create;
//set myRequest properties
myResponse := myWrapper.mySoapMethod(myRequest);
//do whatever you need with the response
ラッパーについて
は、いくつかのメソッドが追加されwrapper
たインターフェイスの実装になります。実際には、呼び出すことができるIInvokable
メソッドごとに 1 つのメソッドが必要です。SOAP method
通常、そのインターフェイス宣言は次のようになります。
TmyWrapper = interface(IInvokable)
['...'] //GUID here
function oneMethod(...): oneMethodResponse;
function anotherMethod(...): anotherMethodResponse;
end;
function getMyWrapper(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): TmyWrapper ;
関数の実装は次のようになります。
function GetMyWrapper(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): TmyWrapper;
const
defWSDL = 'http://<soap service IP and port>/<soap service name>?wsdl';
defURL = 'http://<soap service IP and port>/<soap service name>';
defSvc = '<default service name>';
defPrt = '<default service port>';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as TmyWrapper );
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
いくつかの補足事項:
- メソッドを使用してインスタンスを取得するときに、
HTTPRIO
インスタンスを に注入できます。これは、たとえば、別のものを設定したり、生成されたものを調べたりするのに役立ちます。wrapper
getXYZWrapper
SOAP URL
XML
- Delphi は、が期待する
XML
のとは少し異なる方法で送信される を生成することがあります。SOAP
機能するはずなのに機能しない場合は、XML
生成されたものを調べて、本来あるべきものと比較してください。HTTPRIO
オブジェクトのonBeforeExecute
イベントを使用して、XML
送信する前に を変更できます。
- 必要な場合
onAfterExecute
は、オブジェクトのメソッドを使用して応答HTTPRIO
を検査することもできます。XML