使用WCF,REST和标准HTTP标头实现客户端缓存

时间:2010-11-22 21:52:29

标签: c# wcf rest client

我有一个基于Perl的REST服务,我正在使用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 个答案:

答案 0 :(得分:2)

在我看来,如果您在服务器上使用非Web WCF绑定,您实际上只想在客户端上使用WCF通道。

在你的情况下,你甚至没有在服务器上使用.Net,所以我认为WCF会给你带来很大的痛苦。

我建议您只使用System.Net中的HttpWebRequest和HttpWebResponse类。如果这样做,您还可以利用WinINet缓存提供的内置缓存。如果您在客户端Http客户端中设置缓存策略,您将获得免费所需的所有缓存行为。