Очистить OutputCache в веб-сервисе WCF Rest? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть веб-сервис 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...