WebService工作流程

时间:2025-01-20 14:32:15
WebService是基于网络的、分布式的模块化组件。
工作流程:
客户端 ——>阅读WSDL文档(了解webservice的请求) ——> 调用WebService 
上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务器最后返回给客户端,这和普通的http请求一样,请求->处理->响应,与普通的请求不一样的就是webservice请求中有一个WSDL文档和SOAP协议,以及.NET Framework自带的Web Service请求处理器 ISAPI Extension。

客户端 ——>  阅读WSDL文档 (根据文档生成SOAP请求)  ——> 发送到Web服务器 ——> 交给WebService请求处理器 (ISAPI Extension)
——> 处理SOAP请求 ——>  调用WebService ——> 生成SOAP应答  ——>  Web服务器通过http的方式交给客户端
 
1. SOAP:  是以XML形式提供简单、轻量、用于在分散或分布式环境中交换结构化和类型信息的机制。SOAP消息的基本结构通过HTTP协议传递XML数据。简单的说就是一个基于XML的协议。
2. WSDL :  是使用XML文档描述Web服务的标准,是Web服务的的接口定义语言,描述如何访问具体的接口,包含3个基本属性:
      a. 如何访问服务:和服务交互的数据格式以及必要的协议。
     b. 服务在哪里: 协议相关的地址,比如url信息等
     c. 服务具有哪些功能: 服务提供的具体操作方法,=》就是你webservice中提供了哪些可调用的方法

原理详细描述:
无论使用什么工具、语言编写 WebService,都可以使用 SOAP 协议通过 HTTP 调用,其工作原理相同。创建 WebService 后,将其暴露给Web客户,任何语言、平台的客户都可以阅读其  WSDL 文档,以调用 WebService 。客户可以根据 WSDL 描述文档生成一个 SOAP 请求信息。 WebService 部署在Web服务器( 如IIS )上,客户生成的 SOAP 请求会被嵌入在一个 HTTP 请求中并发送到Web服务器,Web服务器(IIS)再将请求转发给 WebService 请求处理器。
对于.Net而言,WebService请求处理器则是一个 .NET Framework 自带的 ISAPI Extension。Web请求处理器用于解析收到的SOAP请求,调用 WebService,然后生成相应的SOAP应答。Web服务器得到SOAP应答后,在通过HTTP应答的方式将其返回给客户端。

WebService优势:
1.平台无关性 。   任何平台都可以使用WebService
2.编程语言无关系。  基于XML,XML本身与平台无关,使用XSD作为数据类型系统,不论用什么语言编写,所有数据类型都会被转换为XSD,只需要遵守WebService的统一标准即可。
3.部署、升级和维护Web服务简单、方便。
4.实现多数据、多服务的聚合。
5.成本低。
6.不受防火墙的影响。 使用SOAP协议通信,封装了XML格式的数据,以ASCII文本的方式传输,而非二进制,调试方便,而且可以使数据容易的通过防火墙,不需要单独开通信端口。 


WSDL、SOAP和UDDI(统一描述、发现和集成机制) 一起工作,支持WebService与Internet上的其他服务、应用程序和设备交互作用。UDDI提供了发布和定位Web服务功能(更多请自行了解),WSDL描述了Web服务,SOAP服务提供了传输消息。

调用 Web Service 方法有两种方式,同步调用和异步调用。
同步调用是程序继续执行前等候调用的完成,而异步调用在后台继续时,程序也继续执行,不必等待方法处理完成而直接返回。具体的调用流程见下图:
对于同步调用方法而言, UI 线程依赖于方法的实现,方法执行时间过长将导致 UI 无法及时与用户进行交互。我们知道,在 Windows 客户端中,每个进程都有单一的 UI 进程,在服务器中,可扩展性依赖于线程的使用。对于异步调用方法而言,能够及时于用户交互响应,从而提供了良好的用户体验;同时也可以改善服务器的可扩展性,将服务器与通讯问题隔离。

客户端异步调用方法
在客户端异步调用是完全基于 Proxy 的方法,异步行为最简单的模式。 Visual Studio 提供对它的直接支持。所以我们不必在 Web 服务应用程序中编写额外的代码来处理异步调用。
遍及 .NET Framework 的异步调用有一个基础的设计模式: Begin 方法和 End 方法,他们分别用于开始和终止异步处理。 Visual Studio 生成了这两种方法:
Begin<WebServiceMethodName> ——该方法通知 Web 服务开始处理调用,并立即返回。该方法不返回 Web 服务调用所指定的数据类型,而是返回一种实现 IasyncResult 接口的数据类型。
End<WebServiceMethodName> ——该方法通知 Web 服务返回先前启动的 Web 方法所生成的结果。
IasyncResult 接口包含了 WaitHandle 类型的 AsyncWaitHandle 特性。这个公共接口允许用户的客户应用程序等待调用,而且,该接口将用 Any All 语义(例如 WaitAny WaitAll )作为信号通知客户应用程序。例如,如果想要客户应用程序异步等候一个 Web 方法,可调用 WaitOne 来处理要完成的 Web 服务。
一般来说,客户端异步代理方法有两种实现机制:使用同步对象和回调机制(也许你可能对用这个词不习惯,实在找不到第二个词来代替,暂且这样称呼吧)

同步对象
同步对象允许用户对 Web 服务的方法进行调用(使用 Begin 方法),然后继续处理。在后面的程序中,可以调用 End 方法,传递同步对象,以便得到调用结果。这种方式下,能够继续执行函数中的程序流程,而不执行回调处理。在这里调用 WaitOne() 方法会挂起当前线程,避免忙等待的发生,直到 Web Services 方法调用结束返回后,该线程才会被重新唤起。

回调机制
从本质上说,异步回调机制是委托的 .NET 等价物,它通过在异步操作完成时建立一个被调用的单独方法来进行工作。调用应用程序能够继续处理其他的任务,直到回调函数被调用为止。这就意味着处理已经完成了,应用程序可以正常运行了。使用同步对象不同于回调机制的区别是,当检查 Web 方法是否已经完成,以及检查 Web 方法中是否含有需要的结果时,我们无法对其进行控制,而在回调的情况中, Web 方法一旦完成,这些工作就会被自动执行。

使用回调机制还是同步对象取决于用户所面临的具体情况。在检查异步调用是否完成时,如果愿意对处理过程进行控制,那么可以选择使用同步对象。如果觉得自己编写代码来完成对 Web 服务的调用,且当方法一旦执行完毕就立即由所调用的特殊函数来处理所返回的结果更适合一些,那么就更适合用回调机制。
在客户端使用异步方法调用,可以改进 UI 响应度,在服务器端不需要实现异步操作,对服务器来说是透明的,而且客户端能够在任何时间选择阻塞。