5

Delphi XE2 DataSnap ライブラリを使用しています。私の datasnap サーバーは HTTP ベース (TIdHTTPWebBrokerBridge または ISAPI) です。

DataSnap サービスに初めてアクセスすると、TDSServer インスタンスは、TDSServerMethodProvider.Open および TDSServerMethodProvider.AddRegisterServerClasses を介して、使用可能なすべてのサーバー メソッドを登録します (ユニット Datasnap.DSCommonServer.pas を参照)。

datasnap クラス名とサーバー メソッドは事前登録する必要があります。そうしないと、クライアントがサービスにアクセスするときに失敗します。

datasnap クラスとサーバー メソッドを動的にロードできるアプリケーションを作成することを考えています。私の datasnap アプリケーションは、URL に基づいてサービスの検索を開始するまで、クラスまたはサーバー メソッドにアクセスできるかどうかを認識しません。たとえば、次のような URL です。

http:/.../datasnap/rest/TServerMethods1/ReverseString

アプリケーションがクラス TServerMethods1 を検索し、メソッドを使用する前に登録します。

TWebModule.BeforeDispatch イベントを使用して、Request.URL 文字列を識別し、対応する datasnap クラスにロードするパッケージを決定できます。

このアプローチを使用することで、柔軟でスケーラブルな汎用 DataSnap アプリケーションを作成できます。

DataSnap ソース コードを調べたところ、既存の DataSnap ソースに何らかの追加作業を行わない限り、それは不可能であることがわかりました。登録に不可欠なクラス TDSServerMethodProvider のいくつかのメソッドは、private セクションで宣言されています: AddRegisteredServerClasses, AddAllMethods.

TDSServerMethodProvider クラスは追加登録用に設計されていないようです。登録できるのは一度だけです。

4

0 に答える 0