Python Web 服务开发者: 通过 SMTP 处理 SOAP
2008-09-30 13:01:38 来源:WEB开发网处理 SOAP 消息
通过 SMTP 处理 SOAP 请求和响应有三种可能的方法。第一种方法取决于您的 SMTP 服务器的能力。使用这种方法时,您编写 SOAP 处理应用程序,然后将它连接到一个电子邮件地址。大多数电子邮件服务器都将允许您把在特定地址上接收到的消息管道传送给应用程序。然后,您的应用程序将读取 SMTP 消息(最有可能从标准过程输入读取),处理请求并发出响应。
第二种方法假定您拥有对 mailbox 文件的访问权。使用这种方法时,您将定期扫描邮件文件以查找 SOAP 请求,从邮件文件中删除这些消息,处理请求并发出响应。
最后一种方法 — 也是我们将在这里使用的方法,因为另两种方法过于依赖本地配置选项 - 是编写一个 SMTP 服务器。使用这种方法时,您在一个端口上侦听 SMTP 请求,当接收到请求时对其进行处理并在处理完成后发出响应。
把请求和响应链接起来
无论您决定怎样通过 SMTP 来处理 SOAP,您都需要一种机制把 SOAP 请求和 SOAP 响应链接起来。SOAP 的试验性电子邮件绑定(请参阅 参考资料)推荐使用“Message-ID”和“In-Reply-To”SMTP 头。当消息被发送时,客户机将一个唯一的标识符放入“Message-ID”头中,接着,服务器在响应消息的“In-Reply-To”头中使用相同的标识符。这样就使客户机能够将接收到的响应与适当的请求匹配起来。
示例相关性
本专栏的示例是用 Python 2.2.1 编写的,并且使用了一些功能,主要是用了新的服务器体系结构。我们还将用 ZSI 1.2 来处理 SOAP 消息。ZSI 的安装相当轻松,因为它用标准的 python distutils 作为其分发版。
SOAP SMTP 服务器
使用 Python 的内建 smtpd 库编写 SMTP 服务器相当轻松。就象在 Python 的所有服务器体系结构中那样,您从一个基类 — 在这个例子中是 smtpd.SMTPServer — 继承(请参阅 清单 1),并根据您所期望的功能覆盖该类中的某些方法。在这个例子中,我们覆盖了 process_message 方法(每当新消息到达时,就调用该方法)。为了启动服务器,我们使用 Python 2.2 的新的 asyncore 开始处理请求。
更多精彩
赞助商链接