如何为HTTP datasnap服务器动态加载服务器方法?

Cha*_*ang 5 delphi datasnap

我正在使用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
Run Code Online (Sandbox Code Playgroud)

将使应用程序在使用该方法之前查找类TServerMethods1并注册.

我们可以使用TWebModule.BeforeDispatch事件来标识Request.URL字符串,并确定要为相应的datasnap类加载哪些包.

通过使用这种方法,我可以编写一个灵活且可扩展的通用DataSnap应用程序.

在检查DataSnap源代码之后,我发现除非在现有的DataSnap源上做一些额外的工作,否则这是不可能的.TDSServerMethodProvider类中对注册至关重要的几个方法在私有部分中声明:AddRegisteredServerClasses,AddAllMethods.

TDSServerMethodProvider类似乎没有设计用于额外注册.它只允许注册一次.