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);

最初の応答は期待どおりに返され、応答オブジェクトに変換されます。キャッシュされた 2 番目は余分なスラッシュで返され、その結果、シリアル化できません。

最初の応答:

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

2 番目の応答:

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

Redis をキャッシュとして使用しています。

スラッシュで保存されているredisサーバーを見てきました。

4

1 に答える 1

1

これは、異なるバージョンの ServiceStack アセンブリを使用しているクライアントに関連していたことが判明しました。サーバーとクライアントの両方を最新のものに更新したところ、すべてが期待どおりに機能しました。

于 2012-11-01T15:04:42.627 に答える