首页 新闻 会员 周边 捐助

webservice通信原理

0
悬赏园豆:30 [已解决问题] 解决于 2015-05-30 20:53

在.net里,webservice请求处理,是否基于asp.net 管道?

以前在园子里看到过,处理http请求的类必须实现IHttphandler接口,但是webservice并没有实现这个接口,那么是这句话不成立,还是webservice不是基于asp.net 管道的,或者是其他的原因?

最后想详细了解webservice的请求和处理的过程,谢谢!

庸俗的主页 庸俗 | 初学一级 | 园豆:190
提问于:2012-09-06 15:27
< >
分享
最佳答案
0

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的难度。

收获园豆:30
Launcher | 高人七级 |园豆:45050 | 2012-09-06 16:19

意思是,处理HTTP请求并不一定只能实现IHttphandler是吧,像IServiceProvider这个接口也行!

学习了。

庸俗 | 园豆:190 (初学一级) | 2012-09-06 16:29

@庸俗: 我可没这么说,我说的是 ServiceProvider 是一种模式应用,可以用来定位实际的处理器,不限于用在asp.net webservice这一个场景下,包括进程内调度,业务逻辑分解都可以使用该模式来实现。

asmx的handler会把注册的 ServiceProvider 保存起来,当有请求到达后,通过url来创建不同的 ServiceProvider的实例,然后调用它们上面实现的方法。

这样的好处是,开发人员只需要同类型化的参数打交道,而不用关心web service协议本身。框架本身已经帮你做了协议解析。

Launcher | 园豆:45050 (高人七级) | 2012-09-06 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册