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 クラスは追加登録用に設計されていないようです。登録できるのは一度だけです。