|
| | 摘要:WCF作为一个新的特征在.Net Compact Framework中得到实现。在中文MSDN的网站上,你可以找到很多相关的栏目都已经更新。其中有一些我在之前的文章中已经提及,本文将基于Exchange2007继续探讨WCF Compact特有的消息存储和转发特性(Store and Forward messaging)。
Keywords:
WCF,Windows Mobile,.Net Compact Framework,Exchange Server 2007,Virtual Earth
(本文英文原文由marteaga发表于Opennetcf Community 原题为“Exchanging Data using Windows Mobile, Windows Communication Foundation, .NET Compact Framework and Exchange 2007”)
前言
本文结合项目实例阐述了.Net CF,WCF,和Exchange 2007结合的强大魅力, 和本文配套的两个例程你可以在文章末尾找到下载。 第一个例子是一个典型的Line of Business(LOB)的应用,使用消息分派模式(dispatcher)用一个中央调度器来指挥现场工人处理调度器发送的请求。第二个示例是一个p2p的应用,用户可以通过他们的Windows Mobile移动设备来共享各自拍摄的相片。第二个示例中用到的技术当然也可以很轻松的移植到其他一些类似的商业和企业级的应用中去(诸如文件共享与协同)。
开发环境/工具
基本资源:Visual Studio 2008 Exchange 2007
移动应用:.NET Compact Framework 3.5 Windows Mobile 5.0 or later
桌面应用:.NET Framework 3.5 .NET Compact Framework 3.5 SDK
Why E-Mail?
如果你在前面提到的那些文章中已经介绍过Compact WCF中特有的Email-Transport了。你也许会问,为什么要使用Email来传送数据呢?为什么不用ASP.NET Web service,然后让设备连接到这个Web service呢?答案很简单,那就是设备的定址问题。移动设备是“移动”的,它们不能保证一个持续可靠的连接。即便是无线AP“泛滥”的公司,也总会有一些盲点。而且很多情况下你的移动设备总是在运营商网络和企业局域网之间切换,通信的稳定性和设备地址的稳定性都得不到保障。因此,考虑使用Email这种唯一标识来为移动设备定址是有一定依据的。现在许多人都有了自己的Email许多企业也已经通过部署Exchange server实现了Direct Push Email。在我们自己的应用程序中利用这一机制并不需要改变现有的这些基础架构,你可以轻松利用Exchange Direct Push Email来投递你的应用程序的数据,不论用户是在防火墙内或外。
怎么做到的?
要使用WCF和Exchange,我们需要为我们的设备端和桌面应用程序各自添加以下几个程序集:
设备端工程
Microsoft.ServiceModel.Channels.Mail (.NET Compact Framework version)
Microsoft.ServiceModel.Channels.Mail.WindowsMobile
System.Runtime.Serialization
System.ServiceModel
桌面端工程
Microsoft.ServiceModel.Channels.Mail (.NET Framework version)
Microsoft.ServiceModel.Channels.Mail.ExchangeWebService
System.Runtime.Serialization
System.ServiceModel
需要注意的是,这里的Microsoft.ServiceModel.Channels.Mail.dll 程序集是两个不同的程序集,一个是设备上使用的,另一个是为桌面端提供编程接口的, 我们在后面内容中会详细介绍。这里我们还设计了两个helper class来方便我们在设备和桌面应用之间使用邮件信道。他们是:WCFMessagingManager和XmlSerializerWrapper。
XmlSerializerWrapper
要想序列化/反序列化你的数据, WCF需要继承 XmlObjectSerializer. 完成的.Net Framework中可以使用 DataContractSerializer不过这个类在 .NET Compact Framework中是不被支持的. 所以我们需要自己