ユーザ・ハンドラの例
本項では,ユーザ・ハンドラの一般的な使用方法についていくつか説明します。
.NET フィルタは,ユーザ・ハンドラ・メカニズムを利用してメッセージに適用できます。
Microsoft の WSE(Web Service Enhancements)2.0 に精通していれば,.NET フィルタを作成して,受信または送信 SOAP メッセージに登録できます。.NET フィルタは,Microsoft.Web.Services2.SoapInputFilter または Microsoft.Web.Services2.SoapOutputFilter から派生するクラスです。このクラスの ProcessMessage 関数をオーバーライドすることで,エンベロープの本文およびヘッダを検査,変更できます。
スクリプト全体でフィルタをグローバルに定義するには,次の行をスクリプトの default.cfg ファイルに追加します。
[UserHandler] Function=LrWsSoapFilterLoader Args=<Filters InputFilterClass="class name" InputFilterLib="lib name" OutputFilterClass="class name" OutputFilterLib="lib name" /> Order=BeforeSecurity/AfterSecurity/AfterAttachments
InputFilterClass パラメータはクラスの名前を示し,InputFilterLib はクラスがあるアセンブリの名前を示します。次に例を示します。
web_service_call( ... "UserHandlerName=LrWsSoapFilterLoader", "UserHandlerArgs=<Filters InputFilterClass=\"MyFilterNamespace.MyFilterClassName\" InputFilterLib=\"MyAssemblyName\" />", BEGIN_ARGUMENTS, ... END_ARGUMENTS, ... );
SoapOutputFilter を使用して,送信 web_service_call 要求を検査し,SoapInputFilter を使用して,サーバから要求を検査します。フィルタが SoapInputFilter から派生したものであれば,InputFilterClass および InputFilterLib を使用します。あるいは,フィルタが SoapOutputFilter から派生したものであれば,OutputFilterClass および OutputFilterLib を使用します。
特定のステップにフィルタを定義するには,web_service_call 関数に次の引数を追加します。
UserHandlerName= LrWsSoapFilterLoader UserHandlerArgs=<Filters InputFilterClass=\"class name\" InputFilterLib=\"lib name\" OutputFilterClass=\"class name\" OutputFilterLib=\"lib name\" /> UserHandlerOrder=BeforeSecurity/AfterSecurity/AfterAttachments
次の例は,トランスポート層をオーバーライドするユーザ・ハンドラ関数を示しています。VuGen によって,SOAP 要求が HTTP トランスポート上で自動的に送信されることはありません。代わりに,カスタム・ハンドラで指示されたトランスポート・メソッドに従います。
応答を受信したら,次のコマンドを使用して応答エンベロープを設定します。
lr_save_string(someResponseEnvelopeStr, "SoapEnvelopeParam");
別のトランスポート層を適用するには,UserHandlerOrder 引数の値として ReplaceTransport を指定します。トランスポート層をハンドラ内に定義します。
web_service_call(
...
"UserHandlerFunction=<Transport HandlerFunction>",
"UserHandlerArgs=<handler arguments>",
"UserHandlerOrder=ReplaceTransport"
...
LAST);
.NET ツールキットに基づいて Web サービス・スクリプトを使用するとき,インフラストラクチャでは MIME 添付ファイルがサポートされていません。ハンドラ・メカニズムを利用すると,.NET スクリプトに MIME 添付ファイル機能を追加できます。
次の項では,.NET ツールキットで MIME 添付ファイルを送受信する方法について説明します。MIME 添付ファイルは同じ操作で送受信できます。
先頭に戻るMIME 添付ファイルを送信するには,太字のコードを web_service_call に追加します。
web_service_call( "StepName=EchoComplex_101", "SOAPMethod=SimpleService|SimpleServiceSoap|EchoComplex", "ResponseParam=response", "Service=SimpleService", "UserHandlerName=LrWsAttachmentsHandler", "UserHandlerArgs=ATTACHMENT_ADD; ATTACHMENTS_FORMAT_MIME; ContentType=text/plain; FileName=C:\\temp\\results.discomap", "ExpectedResponse=SoapResult", "Snapshot=t1208947811.inf", BEGIN_ARGUMENTS, "xml:cls=" "<cls>" "<i>123456789</i>" "<s>abcde</s>" "</cls>", END_ARGUMENTS, BEGIN_RESULT, END_RESULT, LAST);
FileName および ContentType パラメータを変更して,実際のパスとコンテント・タイプを指定します。
先頭に戻るMIME 添付ファイルを受信するには,次のコードを web_service_call に追加します。
"UserHandlerName=LrWsAttachmentsHandler", "UserHandlerArgs=ATTACHMENT_SAVE_ALL;ParamNamePrefix=attach;"
同じ web_service_call 内で MIME 添付ファイルを送受信するには,Web サービス呼び出しを次のように変更します。
"UserHandlerName=LrWsAttachmentsHandler", "UserHandlerArgs=ATTACHMENT_SAVE_ALL;ParamNamePrefix=attach; ATTACHMENT_ADD; ATTACHMENTS_FORMAT_MIME; ContentType=text/plain; FileName=C:\\temp\\results.discomap",