IWSDServiceProxy
COM公式ドキュメント
クライアントアプリケーションおよびミドルウェア向けに、リモートの WSD サービスを表します。
解説(Remarks)
サービスプロキシオブジェクトは複数のエンドポイント上に存在する場合があります。エンドポイントは URL よりも完全な情報を表します (追加の有用なデータを含みます)。たとえば、あるエンドポイントは IPv4 アドレス上で HTTP をサポートし、別のエンドポイントは IPv6 アドレス上で HTTPS をサポートすることがあります。同一のサービスが両方のエンドポイント上に存在するため、サービスは基盤となるエンドポイントプロキシオブジェクトを持ち、各エンドポイントプロキシがサービスの利用可能な単一のエンドポイントに対応していることが重要です。エンドポイントプロキシは、一方向メッセージや双方向メッセージの送信など、サービスへの単純なメッセージング要求を処理します。
IWSDServiceProxy オブジェクトは、サービスメタデータの取得、サービスプロキシを介したサービスへのメッセージ送信、サービス上のイベントへのサブスクライブ、および型固有のセマンティクスを提供するプロキシへのバインドに使用されます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
リモートサービスとの非同期メタデータ交換要求を開始します。
| ppResult | IWSDAsyncResult** | out | 結果のポーリング、コールバックオブジェクトの登録、または応答受信時にシグナル通知されるイベントの構成に使用する IWSDAsyncResult インターフェイス。 |
戻り値
戻り値には次のものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppResult が NULL です。 | |
| メソッドを完了できませんでした。 | |
| 操作を完了するためのメモリが不足しています。 | |
| メソッドは失敗しました。 |
解説(Remarks)
非同期操作を完了してメタデータを取得するには、IWSDServiceProxy::EndGetMetadata を呼び出します。
非同期メタデータ交換要求を完了し、応答からサービスメタデータを取得します。
| pResult | IWSDAsyncResult* | in | 要求の結果を表す IWSDAsyncResult インターフェイス。使用後はこのオブジェクトを解放してください。 |
| ppMetadata | WSD_METADATA_SECTION_LIST** | out | 要求されたメタデータ。詳細については、WSD_METADATA_SECTION_LIST を参照してください。このオブジェクトは解放しないでください。 |
戻り値
戻り値には次のものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 |
解説(Remarks)
EndGetMetadata は、メタデータ取得操作が完了するまでブロックする場合があります。
IWSDServiceProxy オブジェクトのメタデータを取得します。
| ppServiceMetadata | WSD_SERVICE_METADATA** | out | サービスメタデータを指定する WSD_SERVICE_METADATA 構造体への参照。このオブジェクトは解放しないでください。 |
戻り値
戻り値には次のものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppServiceMetadata が NULL です。 |
解説(Remarks)
このメタデータは、IWSDDeviceProxy::GetHostMetadata が生成するメタデータの一部としても利用できます。
通知イベントまたは要請/応答イベントにサブスクライブします。
| pOperation | WSD_OPERATION* | in | サブスクライブする操作を指定する WSD_OPERATION 構造体への参照。 |
| pUnknown | IUnknown* | in | クライアントのイベントコールバック関数に渡される匿名データ。このデータは、クライアントオブジェクトをサブスクリプションに関連付けるために使用されます。 |
| pAny | WSDXML_ELEMENT* | in | サブスクリプション要求の本文に追加する拡張データ。IWSDXML* インターフェイスを使用してデータを構築できます。詳細については、WSDXML_ELEMENT を参照してください。 |
| ppAny | WSDXML_ELEMENT** | outoptional | リモートデバイスがサブスクリプション応答に追加できる拡張データ。これにより、サービスはイベントサブスクリプションの追加のカスタマイズを提供できます。使用後は WSDFreeLinkedMemory を呼び出してメモリを解放してください。詳細については、WSDXML_ELEMENT を参照してください。このオブジェクトは解放しないでください。 |
戻り値
戻り値には次のものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| プロキシは、pOperation で指定された操作に既にサブスクライブしています。 | |
| 操作を完了するためのメモリが不足しています。 | |
| メソッドは失敗しました。 |
解説(Remarks)
このメソッドは通常、生成されたプロキシコードからのみ呼び出されます。
通知イベントまたは要請/応答イベントへのサブスクリプションを解除します。
| pOperation | WSD_OPERATION* | in | サブスクライブ済みの操作を指定する WSD_OPERATION 構造体への参照。 |
戻り値
戻り値には次のものが含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| プロキシは、pOperation で指定された通知にサブスクライブしていません。 | |
| pOperation が NULL です。 |
イベンティング状態コールバックを設定またはクリアします。
| pStatus | IWSDEventingStatus* | inoptional | イベントサブスクリプションの状態変化をクライアントに通知する IWSDEventingStatus インターフェイス。NULL の場合、既存のイベンティング状態コールバックがクリアされます。 |
戻り値
デバイスのエンドポイントプロキシを取得します。
| ppProxy | IWSDEndpointProxy** | out | IWSDEndpointProxy インターフェイスへのポインター。 |
戻り値
解説(Remarks)
エンドポイントプロキシは、直前の要求に対して障害 (fault) を受信した場合に提供されます。クライアントは IWSDEndpointProxy::GetFaultInfo を呼び出してエラーの内容を判別できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWSDServiceProxy "{D4C7FB9C-03AB-4175-9D67-094FAFEBF487}" #usecom global IWSDServiceProxy IID_IWSDServiceProxy "{}" #comfunc global IWSDServiceProxy_BeginGetMetadata 4 sptr #comfunc global IWSDServiceProxy_EndGetMetadata 5 sptr,var #comfunc global IWSDServiceProxy_GetServiceMetadata 6 var #comfunc global IWSDServiceProxy_SubscribeToOperation 7 var,sptr,var,var #comfunc global IWSDServiceProxy_UnsubscribeToOperation 8 var #comfunc global IWSDServiceProxy_SetEventingStatusCallback 9 sptr #comfunc global IWSDServiceProxy_GetEndpointProxy 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWSDServiceProxy "{D4C7FB9C-03AB-4175-9D67-094FAFEBF487}" #usecom global IWSDServiceProxy IID_IWSDServiceProxy "{}" #comfunc global IWSDServiceProxy_BeginGetMetadata 4 sptr #comfunc global IWSDServiceProxy_EndGetMetadata 5 sptr,sptr #comfunc global IWSDServiceProxy_GetServiceMetadata 6 sptr #comfunc global IWSDServiceProxy_SubscribeToOperation 7 sptr,sptr,sptr,sptr #comfunc global IWSDServiceProxy_UnsubscribeToOperation 8 sptr #comfunc global IWSDServiceProxy_SetEventingStatusCallback 9 sptr #comfunc global IWSDServiceProxy_GetEndpointProxy 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。