У меня есть веб-сервис WCF Rest с использованием OutputCaching, который настроен в файле Web.config. Кэширование работает нормально, так как оно настроено сейчас. Я хотел бы иметь возможность очистить этот 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>");
Обновление:
Я просто испортил виртуальные пути ... Дох! Наконец, я собрал быстрый, ненужный пользовательский OutputCacheProvider, чтобы увидеть ключи, передаваемые в методы Add, Get, Remove и Set провайдера.
Это сработало, как и ожидалось * лицо ладони *
System.Web.HttpResponse.RemoveOutputCacheItem("/<virtual_directory/<service_name>/agents");