WCF rest 的帮助页面和缓存机制

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板

安装后新建wcf服务应用程序,删除默认建立的文件。

新建RestWcf4HelpPage.svc,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace RestWcf
{
    [ServiceBehavior(IncludeExceptionDetailInFaults=false)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class RestWcf4HelpPage : IRestWcf4HelpPage
    {

        #region IRestWcf4HelpPage 成员

        [WebGet(UriTemplate="/Rest/Get/{id}")]
        public string GetData(string id)
        {
            return "Hello Rest GetData";
        }

        [WebInvoke(UriTemplate="/Rest/Add/{id}",Method="POST")]
        public string AddData(string id)
        {
            return "Hello Rest AddData";
        }

        [WebInvoke(UriTemplate = "/Rest/Update/{id}", Method = "PUT")]
        public string UpdateData(string id)
        {
            return "Hello Rest UpdateData";
        }

        [WebInvoke(UriTemplate = "/Rest/Delete/{id}", Method = "Delete")]
        public string DeleteData(string id)
        {
            return "Hello Rest DeleteData";
        }

        #endregion
    }

    [XmlSerializerFormat]
    [ServiceContract]
    interface IRestWcf4HelpPage
    {
        [OperationContract]
        string GetData(string id);

        [OperationContract]
        string AddData(string id);

        [OperationContract]
        string UpdateData(string id);

        [OperationContract]
        string DeleteData(string id);
    }
}
View Code

然后在建立RestWcf4Cache.svc,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace RestWcf
{
    [ServiceBehavior(IncludeExceptionDetailInFaults=false)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class RestWcf4Cache:IRestWcf4Cache
    {

        #region IRestWcf4Cache 成员

        [AspNetCacheProfile("CacheFor10Senconds")]
        [WebGet(UriTemplate = "/Rest/Get/{id}")]
        public string GetData(string id)
        {
            return "Hello Rest GetData " + DateTime.Now.ToString();
        }

        #endregion
    }

    [ServiceContract]
    interface IRestWcf4Cache
    {
        [OperationContract]
        string GetData(string id);
    }
}
View Code

然后在配置web.config文件,其中duration值缓存的有效时间。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles >
          <add name="CacheFor10Senconds" duration="10" varyByParam="format"/>
          <add name="CacheFor30Senconds" duration="30" varyByParam="format"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="RestWcf.RestWcf4HelpPage">
        <endpoint address="" behaviorConfiguration="RestWcf4HelpPageBehavior"
          binding="webHttpBinding" contract="RestWcf.IRestWcf4HelpPage" />
      </service>
      <service name="RestWcf.RestWcf4Cache">
        <endpoint address="" behaviorConfiguration="RestWcf4CacheBehavior"
          binding="webHttpBinding" contract="RestWcf.IRestWcf4Cache" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="RestWcf4HelpPageBehavior">
          <webHttp helpEnabled="true" />
        </behavior>
        <behavior name="RestWcf4CacheBehavior">
          <webHttp helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  
</configuration>

 帮助页面的效果如下图

get请求结果如下图

缓存效果如图,缓存的时间设置为10s,在10s内结果都是下图,超过时间后就是另一个结果了

posted on 2014-11-06 14:56  lovezj9012  阅读(287)  评论(0编辑  收藏  举报

导航