我的WM那些事(1):突发奇想之后开始行动

最近突发奇想,想给自己的WM手机做一个软件“随便拍拍”,功能是拍照,然后直接发送到我的网站上去。于是我就动手开始做了,就这么简单。

以前我的网站逻辑处理是直接做在UI层的,以前包括数据处理也放在UI层,后来因为有别的应用我把数据层抽了出来,现在,除了网站以外,还多了一个手机终端,于是我把逻辑层也抽了出来,网站直接调用逻辑层,而手机终端调用我采用WCF的方式。 在此之前,我没有WCF的经验,属于学习阶段,也没有WM的经验,还是学习阶段,所以一切只能从头开始,WCF类型于以前的WEBSERVICE,所以学习起来不难,只要知道配置的原理,其实还是比较简单的,但是WM就不行了,网上的资料实在是太少太少太少太少……

很多时候都只能靠自己一点一点的摸索,比如说WM调用照相机SDK,我在网上找了半天,硬是没找到怎么弄,最后还是自己在那些DLL库里边一个个找才发现了,汗~~~ 决定之后,我把逻辑层抽出来单独做为一个项目。然后添加WCF服务项目,开始做服务,代码很简单,所有的逻辑处理都在逻辑层做好了,在服务端只需要传参调用就行了,所以WCF服务端很快就做完了,我把服务挂在了网站上,添加了一些svc,然后直接在文件里指向WCF项目就完事了。

接下来是开始做WM客户端。WM客户端类似于windows form编程,我的windows form编程还是有一定的经验的,以前用winForm做过一个KTV点歌软件,还有一些大大小小的辅助工具,比如说网页编码批量转换。还有以前给李莉老师做一个“WEB自动机的自动合成”演示软件,也是用winForm做的,所以上手起来也比较快,唯一比较蛋疼的是调用一些WM SDK比较费事,只能自己找,千辛万苦之后,终于找到了。 然后比较顺利,首先,连接WCF服务,由于WM编程属于比较老的版本,不认识WCF,只把WCF认成了WEBSERVICE,这我比较熟悉,然后我的“拍拍”就做起来了,实现了一些我想要的功能,拍照,然后直接上传照片,在手机上管理我上传的照片和相册(增删改查)。 一切都完事之后,我开始调试程序,面对毫无把握的高度,心还是有点虚的,不知道会出现什么状况。打开之后,获取相册信息,成功加载相册列表,很高兴,居然没有问题。然后拍照,依然成功,点击“上传”,这时候就出错了,报错“400 badrequest”,我感觉肯定是WCF服务出错了,很无语,在网上找了好几天的资料,才发现原来是我没有配置WCF服务,只是用的默认的配置,然后我沉着网上的方法给自己的WCF配置服务。

 配置服务也是一门学问,我并不懂那些绑定之前有啥区别,比如说basicHttpBinding和wsHttpBinding,我一开始并不觉得这两个有啥区别。而且一开始,我不知道这个配置应该放在WCF服务项目的app.config里边还是应该在网站的web.config里边,事实证明,我应该放在网站的web.config,因为是网站代理了我的WCF服务,就应该放在网站的web.config里边,放在app.config根本没用,只是浮云。

 然后我使用wsHttpBinding绑定,这时候连获取相册列表都不行了,报错:“消息上指定的 SOAP 操作“”与 HTTP SOAP 操作“http://tempuri.org/IPhotoService/GetCategories”不匹配。”,很无语,我看不懂这是神马意思,然后上QQ群求助,唉,热心人太少,没有人帮我,于是在等了很久之后自己试一下,最后试到把wsHttpBinding改成了basicHttpBinding,成功了,这回不报这个错了,突然想到以前看过basicHttpBinding绑定就是为了兼容以前的WEBSERVICE准备的,设置成这个绑定之后,WCF服务器就变成了WEBSERVICE。 这个错误搞定之后,紧接着的错误又来了,接着报错“System.InvalidOperationException: 客户端发现响应内容的类型为“multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:1c50e632-c1e2-4c32-b243-f723b291c51c+id=1";start-info="application/soap+xml"”,但应该是“text/xml””,我快要抓狂了,这个错误比上一个还要晕,于是又上QQ群求助,依然无解。还是老办法,自己试。我仔细查看我的配置文件,看看哪里有值得疑问的地方,看到一行messageEncoding="Mtom",这个Mtom是WCF的新的数据传输格式,还有一个值是"Text",两个的区别是前者数据量较小,后者大一点,网上说的是后者比前者大三分之一吧。我想到WM本身并不认识WCF,会不会也不认识“Mtom”?然后我改成“Text”,搞定!这下没有问题了,上传照片成功! 这下,我的WM和WCF这点事总算是完成了。另外还说一下,我同时做了两个客户端,一个WM的,一个WP7的,因为我的手机是WM系统,所以WP7只做到上传这个功能之后就没再继续做了。WP7同样不认识这个“Mtom”,在添加服务的时候,如果服务端配置messageEncoding="Mtom",则VS会出现警告,说与WCF服务不兼容,并且无法生成配置文件,当改为"Text"后,一切正常,WP7是支持wsHttpBinding的。

posted @ 2012-02-26 20:01  夏彬  阅读(394)  评论(0)    收藏  举报