我正在使用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类似乎没有设计用于额外注册.它只允许注册一次.
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |