WCF的RSET Service

最近想研究将WCF作为移动应用的服务端,刚好看到实现REST Serivce
1.WCF REST服务项目的创建:
     http://www.cnblogs.com/lanvige/archive/2011/05/19/1895654.html
2.WCF REST服务项目发布到IIS上,网上资料基本没提到这个问题(都认为IIS没安装ASP.NET 4.0,应用程序池没设ASP.NET 4.0),我试了全都不行
     最后发现项目模板有点问题,打开web.config,加个设置
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

    发布与一般的“WCF应用程序”发布到IIS,没有什么区别! 

3.服务扩展,如果有多个Service,增加类,例如Service2
      并在Global.asax中作如下改动:
      RouteTable.Routes.Add(new ServiceRoute("Service2", new WebServiceHostFactory(), typeof(Service2)));}
      这里的路由原则类似于ASP.NET MVC原则(很明显,使用了相同的UrlRoute组件)
      表示http://localhost:8322/WcfRest/Service2,则调用Serive2类中有如下定义的方法:

       [WebGet(UriTemplate = "")] 

4. IIS测试成功,如要查看各服务帮助,使用类似URI:

      http://localhost:8322/WcfRest/Service2/help

    VS.NET自带的Development Server与真实的IIS区别还是比较大的,以后尽量用IIS测试!下一步研究将实现它的HTTPS发布,并实现自定义用户名和密码验证

 

5. jQuery调用WCF REST Service示例(测试时,发现Call基地址时,最好加上"/")

jQuery调用WCF REST示例(本域内)

6.发布在IIS上,意外发现PUT和DELETE操作受限,返回405操作,最后找到的解决方案,在网站web.config中,

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      <remove name="WebDAVModule" />
    </modules>

7.WCF的身份验证

   采用了ASP.NET 原有的Forms身份验证,对

   基本思路,在WCF REST Service中实现一个LoginService,以Post方式提交用户名和密码, 这里遇到第1个问题,如何传递多个参数,当然可以用URL传,但没人想看到用户名和密码暴露,查资料,发现了窍门:

   [WebInvoke(UriTemplate = "", Method = "POST",BodyStyle=WebMessageBodyStyle.WrappedRequest)]

        public bool Login(string userName, string userPassword)

   基本思想就是通过了验证,则手工作一个Cookie返回去(加密了的),以后要请求网站资源,必须把Cookie带回来作验证,REST是以标准的HTTP协议实现,所以这点很容易。

    Forms身份验证很容易配置,除了LoginService可以匿名访问,其它的一概不允许,当访问受限时,自动以GET方式访问LoginService,得到的提示是:非法用户。

    后面我们用控制台以标准的HTTP方式访问,得到了正常的数据。 

8.发布在IIS上,并以SSL加以保护,这是折腾我最久的:

   要想SSL正常,有几个要点特别注意:

  (1)Web.Config的配置

       <bindings>

      <webHttpBinding>
        <binding name="">
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
    </bindings> 

 

   <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="3000000">

        <readerQuotas maxArrayLength="300000"/>
         <security mode="Transport"/>
   </standardEndpoint> 

 

(2)服务器配置,防火墙高级设置,入站规则要加上433端口(可以在80后加,80,433)

测试正常,很完美,以下是测试代码: REST服务及调用

 

   下一步的计划:实现WCF双向认证,角色权限研究,WCF RSET用上MSMQ 

 

 

posted @ 2012-07-11 15:49  阿土仔  阅读(1866)  评论(1编辑  收藏  举报