在.net里,webservice请求处理,是否基于asp.net 管道?
以前在园子里看到过,处理http请求的类必须实现IHttphandler接口,但是webservice并没有实现这个接口,那么是这句话不成立,还是webservice不是基于asp.net 管道的,或者是其他的原因?
最后想详细了解webservice的请求和处理的过程,谢谢!
public class WebService1 : System.Web.Services.WebService
public class WebService : MarshalByValueComponent
public class MarshalByValueComponent : IComponent, IDisposable, IServiceProvider
Asp.Net Web Service是基于Asp.Net管道的,
“处理请求的类必须实现IHttpHandler”,这句话的理解不要太狭隘了,它的意思是所有HTTP请求的处理器都实现了IHttpHandler,如果你要编写一个能够直接处理请求的处理器,你需要实现IHttpHandler。但是,在实现了的处理器内部,可以通过一定的模式来分发请求到实际的处理流程。
注意上面的继承链,实现了 IServiceProvider,因此,处理asmx的handler可以通过url来决定使用哪个IServiceProvider来处理请求。因此,从实际的 WebService1 中看不到 IHttpHandler 的影子,但它却可以响应请求。
asmx的handler封装了web service协议,这样,可以给实际的实现服务提供类型化的参数,阻止开发人员直接面对web service协议,简化了开发人员实际开发web service的难度。
意思是,处理HTTP请求并不一定只能实现IHttphandler是吧,像IServiceProvider这个接口也行!
学习了。
@庸俗: 我可没这么说,我说的是 ServiceProvider 是一种模式应用,可以用来定位实际的处理器,不限于用在asp.net webservice这一个场景下,包括进程内调度,业务逻辑分解都可以使用该模式来实现。
asmx的handler会把注册的 ServiceProvider 保存起来,当有请求到达后,通过url来创建不同的 ServiceProvider的实例,然后调用它们上面实现的方法。
这样的好处是,开发人员只需要同类型化的参数打交道,而不用关心web service协议本身。框架本身已经帮你做了协议解析。