Реализация клиентского кэша с использованием WCF, REST и стандартных заголовков HTTP - PullRequest
1 голос
/ 23 ноября 2010

У меня есть служба REST на основе Perl, и я использую C # и WCF, чтобы заставить клиента общаться со службой. У меня есть несколько дорогих звонков, и я хотел бы создать систему кеширования. Мне нужна возможность проверить и проверить, существуют ли на сервере более новые версии кэшированных данных. У меня была идея использовать стандартный заголовок запроса «If-Modified-Since» и код состояния ответа «304 Not Modified», однако у меня возникли проблемы с перехватом исключения, которое выдается в ответе.

Мой клиентский класс является производным от ClientBase <>. Вот метод, который я использую для вызова метода службы:

private T RunMethod<T>(ReqHeaderType reqHeaders, ResHeaderType resHeaders, Func<T> meth)
{
    //Get request and response headers
    var reqProp = GetReqHeaders(reqHeaders);
    var resProp = GetResHeaders(resHeaders);

    using (var scope = new OperationContextScope(this.InnerChannel))
    {
        //Set headers
        OperationContext
            .Current
            .OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProp;
        OperationContext
            .Current
            .OutgoingMessageProperties[HttpResponseMessageProperty.Name] = resProp;

        //Return the result of the call
        return meth();
    }
}  

Исключение возникает при выполнении обратного вызова, который выполняет метод обслуживания. Есть ли способ перехватить исключение и проверить, является ли это ответом «Не изменено»?

1 Ответ

2 голосов
/ 23 ноября 2010

По моему мнению, вы действительно хотите использовать каналы WCF на клиенте только в том случае, если на сервере вы используете привязки WCF без веб-интерфейса.

В вашем случае вы даже не используете .Net на сервере.поэтому я думаю, что WCF причинит вам много боли.

Я предлагаю вам просто использовать классы HttpWebRequest и HttpWebResponse в System.Net.Если вы сделаете это, вы также можете воспользоваться встроенным кэшированием, которое предоставляется кешем WinINet.Если вы установите политику кэширования в клиентском Http-клиенте, вы получите все необходимое поведение кэширования бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...