Python Web 服务开发者: 通过 SMTP 处理 SOAP
2008-09-30 13:01:38 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

处理 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 开始处理请求。
更多精彩
赞助商链接