У меня есть служба 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();
}
}
Исключение возникает при выполнении обратного вызова, который выполняет метод обслуживания. Есть ли способ перехватить исключение и проверить, является ли это ответом «Не изменено»?