Python Web 服务开发者: 通过 SMTP 处理 SOAP
2008-09-30 13:01:38 来源:WEB开发网本文示例源代码或素材下载
引言
由于某些原因,大多数人只想到通过 HTTP 处理 SOAP。首先,HTTP 是 SOAP 协议的最常见传输协议,迄今为止 Web 上可用的大多数服务都要使用它。其次是由于 HTTP 协议的工作方式,它非常适合 SOAP 请求/响应结构。在 HTTP 中,您向服务器发送消息。HTTP 请求的格式非常灵活,使您能够在主体内嵌入一个 SOAP 请求。然后,HTTP 协议(为所有的 HTTP 请求)指定一个也足够灵活、可以嵌入一个 SOAP 响应的响应。这样就可以非常直接地实现 SOAP 服务。
SMTP 协议的情况就不是这样了。当使用 SMTP 时,请求格式很灵活,可以让您附加一个 SOAP 请求。不过,响应结构并不是十分灵活。SMTP 响应和“O.K.”一样简单。 SMTP 服务扩展(SMTP Service Extension,ESMTP)规范确实为响应添加了一点信息(如“未知的用户(Unknown User)”),但响应格式仍没有灵活到可以放入一个完整的 SOAP 响应。用 SMTP 发送响应的唯一方法就是使用另一条电子邮件消息。
出于这个原因,SMTP SOAP 服务的开发者需要添加额外的逻辑,以便能够跟踪传入的 SOAP 请求,然后通过一条单独的 SMTP 消息向接收方发送 SOAP 响应。这就使使用 SMTP 的 SOAP 服务的复杂性增加了许多(不久我们就会看到这一点)。
那么,您为什么想通过 SMTP 处理 SOAP 呢?最常见的答案是“因为我不能使用 HTTP。”其中不能使用 HTTP 的较为常见原因之一是防火墙。如果您位于防火墙的后面,就很可能无法控制在何处处理 HTTP 请求。不过,倒是有一个接收电子邮件的绝好机会。另一个原因是请求/响应消息传递模型可能不是您的应用程序所期望的模型。SMTP 最适合发布/订阅或单向消息传递模型。最后一个原因,您正在编写的服务不是实时的。如果您的服务不得不执行复杂的查询或者可能会花费 300 多秒(常见的 HTTP 请求超时)的复杂计算,那么就需要一种异步方法,如 SMTP。
更多精彩
赞助商链接