首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

应用 WCF 实现 RESTful 方式的 WebService

2013-02-24 
使用 WCF 实现 RESTful 方式的 WebService最近一直在做基于 BIM 的云计算相关的事情。很多渠道得知 Autodes

使用 WCF 实现 RESTful 方式的 WebService

最近一直在做基于 BIM 的云计算相关的事情。很多渠道得知 Autodesk 自己早在两年前已经开始内部进行战略调整,全面拥抱云计算。作为 Autodesk BIM 产品的追随者,自然需要紧跟老大的步伐。


云计算的概念太大,尤其是面向建筑行业这种几乎涉及社会生活所有方面的领域,我的切入点是基于 BIM 模型的运营维保。其中一个很重要的功能就是通过手机向服务器发送多媒体数据。目前流行的技术方案是在服务器端采用 RESTful 方式实现 WebService,之后移动端自行组织 HTTP 数据包向 RESTful 接口发送。


WCF 是微软力推的通讯框架,它能够以 ASP.NET WebService 的方式实现 RESTful 方式的服务。但是缺陷是目前的版本不支持对 HTTP multipart 格式的自动解析。而不像传统的 ASP.NET WebService 可以自动解析 multipart 中的多媒体数据,并通过 Context.Request.Form["name"] 和 Context.Request.Files["name"] 方便地访问。


在网上搜索了不少其他人的代码,发现 HttpMultipartFormDataParser 是比较好的。可以解析由任意数量的多媒体文件和文本信息组成的 HTTP 包。唯一的缺陷是处理中文时出现乱码。因为作者是老外,不需要处理非罗马字符。


经过一些调试,在这份代码的基础上解决了中文乱码的问题。现在和大家分享一下,希望给和我一样被这个问题困扰,但是又希望将通讯模型统一到 WCF 框架的朋友一些帮助。

代码下载

CSDN下载


代码使用很简单,贴一段我的测试代码如下:


3. 在 WebService 项目的 Web.config 中添加如下配置(重要!!!

    <bindings>      <webHttpBinding>        <!--            Because we need mobile client to post media file (image/audio/video), we have to configure Streamed transfer mode.            On the other hand, let's assume media file won't larger than 1MB.        -->        <binding transferMode="Streamed" maxReceivedMessageSize="1048576"/>      </webHttpBinding>    </bindings>
这段绑定相关的配置应该放在  <system.serviceModel> 节点中,与 <standardEndpoints> 相同层级。

配置首先将 WebService 设置为使用流模式(默认是缓冲模式),与之前例子代码中方法 Upload 的参数 (Stream dataStream) 相对应。否则是无法接收到数据的。然后将绑定的可接收数据增加到 1MB(默认只有 64 KB)。当然这个数据可以根据你的需要调整。

其实除了关于中文的处理之外,其它的细节都可以在 GitHub 上找到。






热点排行