清除WCF Rest Web服务中的OutputCache?

时间:2019-05-16 14:46:41

标签: c# asp.net wcf caching

我有一个使用OutputCaching的WCF Rest Web服务,该服务在Web.config文件中配置。现在配置缓存似乎工作正常。我希望能够通过将服务调用发布到Web服务来从单独的前端应用程序清除此OutputCache。

当前的Web.config文件。请注意,为简洁起见,删除了多个配置文件:

<caching>
  <outputCache enableOutputCache="true" />
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="AgentsByAgentId" location="Server" duration="600" varyByParam="agentId;callback" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

当前界面设置:

[ServiceContract]
public interface IAgentSearch
{
    [AspNetCacheProfile("SearchByAgentId")]
    [WebGet(UriTemplate = "/agents?agentId={agentId}", ResponseFormat = WebMessageFormat.Json)]
    [Description("Search by agent ID.")]
    [OperationContract]
    IEnumerable<Agent> SearchByAgentId(string agentId);

    ... // Other methods removed for brevity.

    [WebInvoke(Method = "POST", UriTemplate = "/clearcacheprofiles")]
    [Description("Method to clear all output cache for the service.")]
    [OperationContract]
    void ClearCacheProfiles();
}

关于如何实现此目标的任何想法?

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class SmartSearchService : ISmartSearchService
{
    public IEnumerable<Agent> SearchByAgentId(string agentId)
    {
        ...
    }

    public void ClearCacheProfiles()
    {
        // What is the best way to clear all OutputCacheProfiles?
    }
}

我不反对以不同的方式进行缓存,如果这样做会更容易。任何意见是极大的赞赏!预先感谢!

更新
我在ClearCacheProfiles()方法中尝试了以下方法,但没有成功。

System.Web.HttpResponse.RemoveOutputCacheItem("/agents");

System.Web.HttpResponse.RemoveOutputCacheItem("/agents?agentId=<some_id_i_searched>");

更新
我只是弄乱了虚拟路径... Do!最后,我整理了一个快速的垃圾自定义OutputCacheProvider,以查看传递给提供程序的Add,Get,Remove和Set方法的键。

这按预期工作*脸掌*

System.Web.HttpResponse.RemoveOutputCacheItem("/<virtual_directory/<service_name>/agents");

0 个答案:

没有答案