我有一个使用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");