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

时间:2012-07-06 04:22:40

标签: 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

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

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

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

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

TDSServerMethodProvider类似乎没有设计用于其他注册。它只允许注册一次。

0 个答案:

没有答案