最近比较忙,贴迟了~~
每一个网格服务的实例都提供了一些可以让客户端调用的函数。下面将讨论处理客户请求的过程。
当一个请求到达IIS WEB服务器的时候,会发生以下的步骤:
1.ISAPI过滤器:一个ISAPI过滤器冲写请求的目的URL,这样请求就可以被OGSI.NET的托管代码中的HttpHandler所处理。
(注:ISAPI过滤器通过重写请求URL将请求调度给ASP.NET基础架构,这点是必须的。因为IIS根据所请求的页面的扩展名调度请求<比如,所请求的asmx页面会交给ASP.NET来处理>)。为了处理随心所欲的服务名,便使用了ISAPI过滤器。因为请求会在处理的前期被拦截<即在IIS开始调度之前>,假如请求采用了容器所定义的前缀,那么请求将会被拦截,这样才可交给OGSI.NET的HttpHandler来处理。)
2.HttpHandler路由:HttpHandler将消息调度出IIS/ASP.NET系统,送往OGSI.NET容器,请求消息被送往容器中的调度器。
3.调度器寻找网格服务:调度器查找到在调度器的服务表中的请求URL,然后通过URL寻找合适的GSW。调度器得到GSW的句柄,并称它为ProcessRequest方法,这个方法以原始的消息作为参数。
4.处理消息头:GSW的消息处理器处理原始的消息的消息头,假如是个SOAP消息,那么它将会通过WSE的流水线进行处理。容器会使用消息头的信息来检查调用是否符合服务的安全策略。
5.取得方法的名称和参数:消息处理器逆序列化消息体,取得客户端所要调用的方法的名称,以及为所调用的参数进行译码的工作。
6.为方法名取得方法句柄:GSW从它port type数组中找到实现了所指定的方法的port type,然后使用反射取得所需要的方法的句柄。
7.调用方法:GSW调用所请求的方法并取得结果。
8.序列化结果:GSW使用消息处理器序列化返回结果或抛出的异常,形成一个字节数组。
9.将结果返回给客户端:将结果的数组送到调度器,调度器再将其送到HttpHandler,再送到IIS,IIS会结果再传回给客户端。