2

我使用 ServiceStack 创建了一个缓存的 web 服务。

public class ContentSearchService : ServiceBase<ContentSearch>
{
    public ICacheClient CacheClient { get; set; }

    protected override object Run(ContentSearch request)
    {


        var cacheKey = "unique_key_for_this_request2";
        return base.RequestContext.ToOptimizedResultUsingCache(this.CacheClient, cacheKey, () =>
        {
            //Delegate is executed if item doesn't exist in cache


            //Any response DTO returned here will be cached automatically
            return new ContentSearchResponse()
            {
                Contents = new List<ContentData>()
                {
                    new ContentData()
                    {
                         FileName = "testfile.jpg"
                    }
                }
            };
        });
    }
}

然后使用以下命令运行:

IRestClient client = new JsonServiceClient("http://internal");

ContentSearch search = new ContentSearch();

ContentSearchResponse response = client.Put<ContentSearchResponse>("/json/syncreply/ContentSearch", search);

第一个响应按预期返回并转换为响应对象。第二个缓存的返回带有额外的斜杠,因此无法序列化。

第一反应:

{"Contents":[{"FileName":"testfile.jpg","Company":0,"Version":0}]}

第二个回应:

{\"Contents\":[{\"FileName\":\"testfile.jpg\",\"Company\":0,\"Version\":0}]}

我使用 Redis 作为缓存。

我已经查看了它们与斜杠一起存储的 redis 服务器。

4

1 回答 1

1

原来这与使用不同版本的 ServiceStack 程序集的客户端有关。我将服务器和客户端都更新到了最新版本,一切都按预期工作。

于 2012-11-01T15:04:42.627 回答