• 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 

  • 相关阅读:
    HDU 6182 A Math Problem 水题
    HDU 6186 CS Course 位运算 思维
    HDU 6188 Duizi and Shunzi 贪心 思维
    HDU 2824 The Euler function 欧拉函数
    HDU 3037 Saving Beans 多重集合的结合 lucas定理
    HDU 3923 Invoker Polya定理
    FZU 2282 Wand 组合数学 错排公式
    HDU 1452 Happy 2004 数论
    HDU 5778 abs 数论
    欧拉回路【判断连通+度数为偶】
  • 原文地址:https://www.cnblogs.com/bearhb/p/2586412.html
Copyright © 2020-2023  润新知