|
|
| | 本文是我前两篇WCF Mobile文章的续篇,主要阐述如何使用Compact WCF特有的Email Transport的消息模型在我们的应用程序中进行实际的开发。
Windows Mobile 进阶系列之.WCF Mobile-1
Windows Mobile 进阶系列之.WCF Mobile-2
How it works?
在前面的随笔中已经提到,Email Transport提供了给设备定址的能力。也就是说,消息可以被准确的发送给移动设备,而且可以被存储起来,在下一次同步的时候再发送出去。这使得移动设备应用程序的开发人员可以在程序中将消息暂存在本地,在同步的时候再经Exchange 2007 发送给邮件中心。而在服务端,消息也可以根据邮件地址被Push到各个与之对应的移动设备上。使用这种Email可本地存储的方式来存放消息,使得我们的客户端(设备端)应用程序即使重起,或者设备重起也不会对消息产生干扰。下图演示了基于Windows Mobile和Exchange Server 2007的Email Transport的工作原理:

作为程序员关心的重点,消息处理层是不希望受到邮件传输层的影响的,或者说程序员通常希望不管是什么传输方式都对他的消息处理层没有什么影响,WCF Email Transport的消息处理层结构如下:

Email Transport采用的是邮件地址+信道名称的绑定方式对移动Client定址,这有点类似于IP地址+端口的定址方式,邮件地址用于给设备定址,信道名(ChannelName)用于给应用程序定址。Compact WCF提供的邮件信道是一个单向的信道(意思是单次的行为总是单向的),就是说Message要么从Server到Device,要么从Device到Server,在等待消息发送的时候信道处于阻塞态。所以跟很多通信程序一样,建议您最好在服务器上为每一个信道的listener分配一个单独的线程去完成数据的处理工作,这样就不用因这种阻塞而干扰主程序的执行。
Email消息的传输过程需要Exchange Server 2007的支持,呃,我的意思是实实在在的需要Exchange 2007,不仅仅需要我们的设备能连接到它,而且还要在Server端做一些工作,才能使这个Email Transport的过程跑起来。
好了,有了一个大概的认识,现在我们可以试着编程了。还是跟这里一样,我们先从比较熟悉的PC端控制台程序开始。它尝试以Email的形式给设备发送消息。在开始之前别忘了添加以下两项引用:
Ø Microsoft.ServiceModel.Mail.dll
Ø Microsoft.ServiceModel.Channels.Mail.ExchangeWebService;
同时,这里我们要用到之前这篇blog中的两个类