古い Web サービスの相違点
前のリリースでは、InterSystems IRIS® Web メソッドから直接 SendRequestSync()、SendRequestAsync()、または SendDeferredResponse() を呼び出すことはできませんでした。別の方法が必要でした。この付録では、この別の方法を使ったコードを維持する場合の利点について詳細に説明します。
概要
前のリリースでは、InterSystems IRIS Web メソッドから直接 SendRequestSync()、SendRequestAsync()、または SendDeferredResponse() を呼び出すことはできませんでした。代わりに、このドキュメントで前述した要件のほかに、プロダクション Web サービスに対する 2 つの要件がありました。
-
各 Web メソッドは、必要に応じて ProcessInput() メソッドを呼び出し、適切な要求プロダクション・メッセージを渡して、応答メッセージを受信しなければなりませんでした。
-
Web サービス・クラスでは、OnProcessInput() コールバック・メソッドを定義する必要がありました。このメソッドでは、SendRequestSync()、SendRequestAsync()、または SendDeferredResponse() を呼び出します。
以下の図は、このシナリオでの要求メッセージの全体的なフローを示しています。
OnProcessInput() メソッドの実装
OnProcessInput() メソッドには、以下のシグニチャがあります。
Method OnProcessInput(pInput As %RegisteredObject,
ByRef pOutput As %RegisteredObject,
ByRef pHint As %String) As %Status
ここで、
-
pInput は、送信する要求メッセージです。
-
pOutput は、返信として送信される応答メッセージです。
-
pHint は、InterSystems IRIS 要求の処理方法を決定するために使用できるオプション文字列です。詳細は、“pHint 引数の使用” の項を参照してください。
以下に例を示します。
Method OnProcessInput(pInput As %RegisteredObject, ByRef pOutput As %RegisteredObject) As %Status
{
set sc= ..SendRequestSync("Lookup",pInput,.pOutput)
Quit sc
}
pHint 引数の使用
Web サービスに複数のメソッドが定義されている場合で、それらをプロダクション内の異なる宛先に送信する必要がある場合、次のように ProcessInput() および OnProcessInput() メソッドのオプションのヒント引数を使用していました。
-
ProcessInput() を呼び出すときに、この呼び出しを行った Web メソッドを示すヒント引数の値を使用していました。以下に例を示します。
Method GetCustomerInfo(ID As %Numeric) As ESOAP.SOAPResponse [ WebMethod ] { //create request message with given ID set request=##class(ESOAP.CustomerRequest).%New() set request.CustomerID=ID //send request message //ProcessInput() calls OnProcessInput(), which actually //sends the message set sc=..ProcessInput(request,.response,"GetCustomerInfo") ... quit soapresponse }
-
OnProcessInput() 内で、ヒント引数を使用してフローを決定していました。以下に例を示します。
Method OnProcessInputAlt(pInput As %RegisteredObject, ByRef pOutput As %RegisteredObject, pHint As %String) As %Status { if pHint="GetCustomerInfo"{ set sc= ..SendRequestSync("GetCustomerInfoBO",pInput,.pOutput) } elseif pHint="GetStoreInfo" { set sc= ..SendRequestSync("GetStoreInfoBO",pInput,.pOutput) } Quit sc }