odata,oData - 另一种不用写代码就在网上提供数据服务的方法

先看两个例子:
  • 最大的地摊平台 eBay 的目录服务:http://ebayodata.cloudapp.net/
  • 北美最大的网络电视供应商 NetFlix 的目录服务:http://odata.netflix.com/Catalog/
这里还有更多提供/支持这种服务的链接:http://www.odata.org/blog/2010/10/28/new-odata-producers-and-consumers
这是什么?
开放数据协议(oData)让你重新认识 HTTP 协议并且简化数据在网上的发布和更新过程。参看在 cnblogs 查到的唯一介绍它的新闻:http://news.cnblogs.com/n/69756/ 和一篇写在 VS 2010 RC 时候的简介:http://www.cnblogs.com/shanyou/archive/2010/02/11/1667381.html
说正题: 用 VS 2010 + .NET V4,几乎可以不用写代码就把完整的数据服务发布到网上。步骤如下:
假设你已经有一个数据库,用户可以发围脖和订阅别人的围脖,数据结构如下,
odata,oData - 另一种不用写代码就在网上提供数据服务的方法

要把它变成一个网络数据服务:
1、在VS 2010 建一个Web应用或网站,加一个数据模型:
odata,oData - 另一种不用写代码就在网上提供数据服务的方法

2、把数据库里的表加进来:
odata,oData - 另一种不用写代码就在网上提供数据服务的方法 把默认生成的关联属性名字改改,改好就像右边这样: odata,oData - 另一种不用写代码就在网上提供数据服务的方法

3、加一个新的 WCF Data Service 网页:
odata,oData - 另一种不用写代码就在网上提供数据服务的方法

4、打开它的 CS 文件,
odata,oData - 另一种不用写代码就在网上提供数据服务的方法odata,oData - 另一种不用写代码就在网上提供数据服务的方法代码 1 public class messages : DataService< /* TODO: put your data source class name here */ > 2 { 3 // This method is called _disibledevent=> 4 public static void InitializeService(DataServiceConfiguration config) 5 { 6 // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc. 7 // Examples: 8 // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead); 9 // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All); 10 config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 11 } 12 }

改成下面这个样子(基本上就是把注释去掉,把刚才的数据模型加进来):
代码 1 public class messages : DataService 2 { 3 public static void InitializeService(DataServiceConfiguration config) 4 { 5 config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 6 config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 7 config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 8 } 9 }

5、没了,你的数据服务已经在网上。
浏览你的SVC网页,可以看到:
代码 1 2 3 4 Default 5 6 Posts 7 8 9 Subscriptions 10 11 12 Users 13 14 15 16

浏览service.svc/Users,可以看到用户列表:
代码 Users http://localhost:38791/messages.svc/Users 2010-12-20T19:22:12Z http://localhost:38791/messages.svc/Users(1) <updated>2010-12-20T19:22:12Z</updated> <author> <name /> </author> <link rel="edit" title="User" href="Users(1)" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Posts" type="application/atom+xml;type=feed" title="Posts" href="Users(1)/Posts" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Followers" type="application/atom+xml;type=feed" title="Followers" href="Users(1)/Followers" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Subscriptions" type="application/atom+xml;type=feed" title="Subscriptions" href="Users(1)/Subscriptions" /> <category term="Message.DataModel.User" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <content type="application/xml"> <m:properties> <d:id m:type="Edm.Int32">1</d:id> <d:name>Test</d:name> </m:properties> </content> </entry> </feed> <br/><br/> <strong>总结</strong><br/> 为什么叫开放数据协议?因为它跨语言和平台的,基于http地址的数据服务。<br/> 例子: <br/> 列出所有的用户:service.svc/Users<br/> 找一个叫张三的用户:service.svc/Users?$filter=Name eq '张三'<br/> 他发的围脖(假设前一个查询返回了他的ID):service.svc/Users(1)/Posts<br/> 他的Fans: service.svc/Users(1)/Followers<br/> 他发的关于cnblogs的围脖:service.svc/Posts?$filter=userId eq 1 and indexof(content, 'cnblogs') ge 0<br/> 这些看起来并不难,但好处是,它们都不需要写任何代码,而且它是RESTful的,任何可以访问URL的语言,平台都可以用它。除此以外,这只是GET操作,POST,DELETE等其他标准HTTP操作也是原生支持的。所以,它是完整的数据服务,并不仅仅是数据查询。<br/> 如果大家有兴趣,我会继续写这个主题,比如在WPF使用这种服务,在JavaScript使用(Built in JSON support, 哈哈),并涉及一些更深的,实际项目的内容,比如数据安全,数据事务。<br/> 题外话, 为什么是另一个?很久很久以前,SQL Server曾经有过Web Service 的服务,但M$做了一个艰难的决定,把它在后续版本中移除了。由于 Entity Framework, WCF data service in .NET V4的加持,这种服务又换了一个方式回来了。<br/> 题外外话,斗转星移,离上一篇文章又两年过去了,地方没变,人老了。<br/><img src="http://www.cnblogs.com/dawave/aggbug/1911034.html?type=1" width="1" height="1" alt=""/> <div> </div> <div id="entry-tags"><span>Tags:</span>  <a href='/Tag/Another-life-177346/Index.html'>另一种人生</a> <a href='/Tag/Another-nostalgia-177345/Index.html'>另一种乡愁</a> <a href='/Tag/odata-177344/Index.html'>odata</a> </div> <script language="javascript"> showSns(); </script> <h3 class="related_post_title">延伸阅读</h3> <ul class="related_post"> <li><span>2011-9-14</span>-- <a href="/Bo-abstracts-selected/Article191325.html">视频播放长度,获得视频时间总长度的另一种方法</a></li> <li><span>2011-3-29</span>-- <a href="/Bo-abstracts-selected/Article165690.html">另一种人生,另一种技术带大家进入采集信息的探讨</a></li> <li><span>2011-2-13</span>-- <a href="/Internet/Article158291.html">odata,datajs——在浏览器中使用OData</a></li> </ul> </div> </div> <div class="list-y"> <ul class="list"> </ul> </div> <div id="comments"><a name="comment"></a> <h3 id="comments-title">最新评论</h3> <ol class="commentlist"> </ol> <div> </div> </div> <div id="respond"> <h3 id="reply-title">发表评论</h3> <form id="formCmt" method="post" onsubmit="return saveComment();"> <label for="author">昵称</label> <input id="txtUserName" name="txtUserName" type="text" value="" size="30"><br /> <label for="comment">评论</label><textarea id="txtContent" name="txtContent" cols="45" rows="8" aria-required="true"></textarea><br /> <label for="comment">验证码</labe><input type="text" id="txtCode" style="width:40px" name="txtCode" onfocus="showCode('imgArtCode')" /> <img id="imgArtCode" style="display:none" />点击图片更换 <input type="hidden" id="txtArticleID" value="135169" /></li> <p class="form-submit"> <input name="submit" type="submit" id="submit" value="发布评论"> <input type="reset" value="重写" /> </p> </form> </div> </div> </div><!--end #container--> <div id="sidebar"> <div id="top-sidebar"> <div class="widget widget_text"> <h3 class="widget-title">赞助商广告</h3> <div class="textwidget"> </div> </div> <div class="widget widget_text"> <h3 class="widget-title">随机更新</h3> <div class="textwidget"> <ul class="artlist"> <li><a href="/Internet/Article194428.html" target="_blank">twitter,Twitter向执法机关提交部分用户信息但未保密</a></li> <li><a href="/Internet/Article194420.html" target="_blank">秘密文件,秘密文件显示乔布斯曾经因爱开玩笑被解雇</a></li> <li><a href="/Bo-abstracts-selected/Article194412.html" target="_blank">2011年10大,雷锋网2011年度10大Android游戏</a></li> <li><a href="/DataBase/Article194404.html" target="_blank">windows下忘记Mysql密码处理方法</a></li> <li><a href="/Internet/Article194425.html" target="_blank">2012没事,2012年开发者该做的11件事</a></li> <li><a href="/Internet/Article194417.html" target="_blank">惠普首款Ultrabook本内地开卖 售价7999元</a></li> <li><a href="/Review-it/Article194409.html" target="_blank">Kindle Fire昙花一现?</a></li> <li><a href="/Internet/Article194427.html" target="_blank">2012年IT界10大预测:惠普将恢复最佳状态</a></li> <li><a href="/Internet/Article194419.html" target="_blank">ipad最低价,消息称苹果调低iPad 2订单 未来或低价销售</a></li> <li><a href="/Internet/Article194411.html" target="_blank">淘宝商城最终续签方案:年费最低1.2万</a></li> <li><a href="/Review-it/Article194403.html" target="_blank">个人信息安全,个人网络信息安全管理方法分享</a></li> <li><a href="/Internet/Article194426.html" target="_blank">Groupon投资方谈中国市场:上市窗口近期关闭</a></li> <li><a href="/Internet/Article194418.html" target="_blank">鱼睡觉闭眼吗,记者亲历快递分拣一线:睁眼干活 闭眼睡觉</a></li> <li><a href="/Review-it/Article194410.html" target="_blank">占据半壁江山,Q3游戏关注度数据显示,腾讯占据半壁江山</a></li> <li><a href="/DataBase/Article194402.html" target="_blank">(Apache+MySQL+PHP)</a></li> <li><a href="/Internet/Article194424.html" target="_blank">奇虎360董事长周鸿祎:以微创新推动变革</a></li> <li><a href="/Bo-abstracts-selected/Article194416.html" target="_blank">小米手机开放购买,1月4日小米再次开放购买,售罄10万部需多久</a></li> <li><a href="/Internet/Article194408.html" target="_blank">京东收购凡客,京东凡客等布局移动购物 中国目前9亿手机用户</a></li> <li><a href="/Internet/Article194431.html" target="_blank">check,Check-in Recipe:在菜市场每签到一次就给你发一条食谱</a></li> <li><a href="/PhotoShop/Article194423.html" target="_blank">PhotoShop 各类教程汇总</a></li> <li><a href="/Internet/Article194415.html" target="_blank">亚马逊平板,亚马逊对平板圣诞销售记录感到高兴</a></li> <li><a href="/PhotoShop/Article194407.html" target="_blank">变形金刚,利用汽车零件合成超酷的变形金刚</a></li> <li><a href="/DataBase/Article194430.html" target="_blank">oracle 10g 常用服务</a></li> <li><a href="/DataBase/Article194422.html" target="_blank">sql数据库开发,使用SQL Server开发和管理数据库 (2)</a></li> <li><a href="/Internet/Article194414.html" target="_blank">HTC、三星WP新机曝光:Tango系统+4G网络</a></li> <li><a href="/PhotoShop/Article194406.html" target="_blank">变形金刚,利用汽车零件合成超酷的变形金刚</a></li> <li><a href="/Internet/Article194429.html" target="_blank">zynga怎么读,Zynga CTO展望2012:大网站将转向HTTPS</a></li> <li><a href="/WebServer/Article194421.html" target="_blank">数据源,2011-12-30(TOMCAT数据源)</a></li> <li><a href="/Bo-abstracts-selected/Article194413.html" target="_blank">check,Check-in Recipe:在菜市场每签到一次就给你发一条食谱</a></li> <li><a href="/PhotoShop/Article194405.html" target="_blank">高光暗调,Photoshop调出暗调外景人物图片漂亮的蓝橙色</a></li> </ul> </div> </div> <div class="widget widget_text"> <h3 class="widget-title">热门标注</h3> <div class="textwidget"> <ul class="tags"> <a href="/Tag/AnZhuoKaiFaZheLianMeng-243890/Index.html">安卓开发者联盟</a>(1) <a href="/Tag/China-Telecom-Tianyi-broadband-243889/Index.html">中国电信天翼宽带</a>(1) <a href="/Tag/Telecom-Tianyi-mobile-phone-243888/Index.html">电信天翼手机</a>(1) <a href="/Tag/ZhongGuoDianXinTianYi-243887/Index.html">中国电信天翼</a>(1) <a href="/Tag/To-Tianyi-open-platform-243886/Index.html">天翼开放平台</a>(1) <a href="/Tag/Select-the-more-the-happier-243885/Index.html">选择越多越幸福</a>(1) <a href="/Tag/White-hair-the-more-pull-the-more-243884/Index.html">白头发越拔越多吗</a>(1) <a href="/Tag/BaJieXueYueDaYueDuo-243883/Index.html">八戒血越打越多</a>(1) <a href="/Tag/ie10ZhuoMianBan-243882/Index.html">ie10桌面版</a>(1) <a href="/Tag/Joining-points-to-note-243881/Index.html">加盟需注意的事项</a>(1) <a href="/Tag/MianShiXuZhuYiShiXiang-243880/Index.html">面试需注意事项</a>(1) <a href="/Tag/HuaiYunXuZhuYiShiXiang-243879/Index.html">怀孕需注意事项</a>(1) <a href="/Tag/XueLiDaiMaKu-243878/Index.html">学历代码库</a>(1) <a href="/Tag/YunFuXuZhuYiDeShiXiang-243877/Index.html">孕妇需注意的事项</a>(1) <a href="/Tag/National-code-library-243876/Index.html">民族代码库</a>(1) <a href="/Tag/KaiYuanDaiMaKu-243875/Index.html">开源代码库</a>(1) <a href="/Tag/Renters-should-pay-attention-to-matters-243874/Index.html">租房需注意的事项</a>(1) <a href="/Tag/We-are-Huolei-Feng-243873/Index.html">我们都是活雷锋</a>(1) <a href="/Tag/We-are-one-family-243872/Index.html">我们都是一家人</a>(1) <a href="/Tag/We-were-good-243871/Index.html">我们都是好孩子</a>(1) </ul> </div> </div> <div class="widget widget_text"> <h3 class="widget-title">最近更新</h3> <div class="textwidget"> <ul class="artlist"> <li><a href="/Bo-abstracts-selected/Article196711.html" target="_blank">爱游戏指南97期:萌宠喵星人</a></li> <li><a href="/Bo-abstracts-selected/Article196710.html" target="_blank">传苹果将采用:夏普IGZO技术面板量产</a></li> <li><a href="/Bo-abstracts-selected/Article196708.html" target="_blank">死亡赛车Death Rally登录Android平台</a></li> <li><a href="/Bo-abstracts-selected/Article196707.html" target="_blank">凡事就怕认真:强迫症米粉24Hr电池优化实测</a></li> <li><a href="/Bo-abstracts-selected/Article196706.html" target="_blank">ipad限时免费,4月16日iPad限时免费App推荐</a></li> <li><a href="/Bo-abstracts-selected/Article196705.html" target="_blank">4月16日iPhone限时免费App推荐</a></li> <li><a href="/Bo-abstracts-selected/Article196703.html" target="_blank">25000美金,Google再受调查 因私自搜集WiFi数据被罚25000美金</a></li> <li><a href="/Bo-abstracts-selected/Article196702.html" target="_blank">不只是手机 Android系统设备盘点</a></li> <li><a href="/Bo-abstracts-selected/Article196701.html" target="_blank">Apple恋上Android?</a></li> <li><a href="/Bo-abstracts-selected/Article196700.html" target="_blank">Beepmo:在LinkedIn上结交新人如同在Foursquare中签到一样简单</a></li> <li><a href="/Bo-abstracts-selected/Article196697.html" target="_blank">Groupon的iPhone应用从AppStore消失</a></li> <li><a href="/Bo-abstracts-selected/Article196696.html" target="_blank">碉堡了!iPhone新应用Dream:ON可操纵梦境</a></li> <li><a href="/Bo-abstracts-selected/Article196695.html" target="_blank">WeHeartPics:有故事的照片应用</a></li> <li><a href="/Bo-abstracts-selected/Article196693.html" target="_blank">美女裸奔,"裸奔 年代人人自危 域名注册也难于幸免?</a></li> <li><a href="/Bo-abstracts-selected/Article196684.html" target="_blank">京东国美苏宁,四月电商战 京东突围与苏宁国美当当再围剿</a></li> <li><a href="/Bo-abstracts-selected/Article196674.html" target="_blank">苹果公司总部,一探苹果公司总部</a></li> <li><a href="/Bo-abstracts-selected/Article196673.html" target="_blank">twitter,Fetchnotes: Twitter标签式的个人任务管理工具</a></li> <li><a href="/Bo-abstracts-selected/Article196669.html" target="_blank">毒舌攻防战,10大毒舌派漫画家眼中的浏览器模样</a></li> <li><a href="/Bo-abstracts-selected/Article196656.html" target="_blank">曝诺基亚Lumia900存重大缺陷 正考虑全球召回</a></li> <li><a href="/Bo-abstracts-selected/Article196648.html" target="_blank">低权限Android应用也可能获取用户数据</a></li> </ul> </div> </div> <div class="widget widget_text"> <h3 class="widget-title">最新标注</h3> <div class="textwidget"> <ul class="tags"> <a href="/Tag/AnZhuoKaiFaZheLianMeng-243890/Index.html">安卓开发者联盟</a>(1) <a href="/Tag/China-Telecom-Tianyi-broadband-243889/Index.html">中国电信天翼宽带</a>(1) <a href="/Tag/Telecom-Tianyi-mobile-phone-243888/Index.html">电信天翼手机</a>(1) <a href="/Tag/ZhongGuoDianXinTianYi-243887/Index.html">中国电信天翼</a>(1) <a href="/Tag/To-Tianyi-open-platform-243886/Index.html">天翼开放平台</a>(1) <a href="/Tag/Select-the-more-the-happier-243885/Index.html">选择越多越幸福</a>(1) <a href="/Tag/White-hair-the-more-pull-the-more-243884/Index.html">白头发越拔越多吗</a>(1) <a href="/Tag/BaJieXueYueDaYueDuo-243883/Index.html">八戒血越打越多</a>(1) <a href="/Tag/ie10ZhuoMianBan-243882/Index.html">ie10桌面版</a>(1) <a href="/Tag/Joining-points-to-note-243881/Index.html">加盟需注意的事项</a>(1) <a href="/Tag/MianShiXuZhuYiShiXiang-243880/Index.html">面试需注意事项</a>(1) <a href="/Tag/HuaiYunXuZhuYiShiXiang-243879/Index.html">怀孕需注意事项</a>(1) <a href="/Tag/XueLiDaiMaKu-243878/Index.html">学历代码库</a>(1) <a href="/Tag/YunFuXuZhuYiDeShiXiang-243877/Index.html">孕妇需注意的事项</a>(1) <a href="/Tag/National-code-library-243876/Index.html">民族代码库</a>(1) <a href="/Tag/KaiYuanDaiMaKu-243875/Index.html">开源代码库</a>(1) <a href="/Tag/Renters-should-pay-attention-to-matters-243874/Index.html">租房需注意的事项</a>(1) <a href="/Tag/We-are-Huolei-Feng-243873/Index.html">我们都是活雷锋</a>(1) <a href="/Tag/We-are-one-family-243872/Index.html">我们都是一家人</a>(1) <a href="/Tag/We-were-good-243871/Index.html">我们都是好孩子</a>(1) </ul> </div> </div> </div> </div> </div> <!--end #main--> <div id="footer"> <div class="clear"></div> <div class="bottom"> <div><img src="/images/bottom.jpg" /></div> <div class="left"> © 2010 <a href="http:// CrazyCoder.cn/" title=" 疯狂代码! | CrazyCoder.cn" rel="home">疯狂代码! | CrazyCoder.cn</a>. All rights reserved. <a href="http://validator.w3.org/check?uri=referer" target="_blank">XHTML</a> / <a href="http://jigsaw.w3.org/css-validator/check?uri=referer" target="_blank">CSS</a> Valid. </div> <div class="right"> <script type="text/javascript"> var _bdhmProtocol = (("https:" == document.location.protocol) ? " http://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3Fcfbb14fb673f0906a6a464d3f9f3c7fb' type='text/javascript'%3E%3C/script%3E")); </script> <script src="http://s5.cnzz.com/stat.php?id=1135864&web_id=1135864&show=pic1" language="JavaScript"></script> </div> <div class="clear"></div> </div> <div class="clear"></div> </div> </div> </body> </html>