0
Q
緩存服務調用
A
回答
0
我以前用過的RealProxy對於這種類型的功能。我在我的博客文章中展示了一些示例; Intercepting method invocations using RealProxy。
緩存代理的一個簡單示例,使用方法的哈希代碼(確保兩個具有相同參數的不同方法分別緩存)和參數。請注意,沒有處理out-parameters,只有返回值。 (如果你想改變它,你需要改變_cache
來保存一個包含返回值和輸出參數的對象。)另外,這個實現沒有表單線程安全性。
public class CachingProxy<T> : ProxyBase<T> where T : class {
private readonly IDictionary<Int32, Object> _cache = new Dictionary<Int32, Object>();
public CachingProxy(T instance)
: base(instance) {
}
protected override IMethodReturnMessage InvokeMethodCall(IMethodCallMessage msg) {
var cacheKey = GetMethodCallHashCode(msg);
Object result;
if (_cache.TryGetValue(cacheKey, out result))
return new ReturnMessage(result, msg.Args, msg.ArgCount, msg.LogicalCallContext, msg);
var returnMessage = base.InvokeMethodCall(msg);
if (returnMessage.Exception == null)
_cache[cacheKey] = returnMessage.ReturnValue;
return returnMessage;
}
protected virtual Int32 GetMethodCallHashCode(IMethodCallMessage msg) {
var hash = msg.MethodBase.GetHashCode();
foreach(var arg in msg.InArgs) {
var argHash = (arg != null) ? arg.GetHashCode() : 0;
hash = ((hash << 5) + hash)^argHash;
}
return hash;
}
}
相關問題
- 1. 用Web服務調用ASP.NET緩存
- 2. Lagom:緩存外部服務調用
- 3. 在MonoTouch中緩存Web服務調用
- 4. Rails 3 - 緩存Web服務調用
- 5. 緩存Web服務
- 6. 適用於存儲Web服務輸出緩存的雲服務?
- 7. Windows服務和緩存
- 8. 服務Googlebot清漆緩存
- 9. 移動服務緩存
- 10. 服務工作者緩存
- 11. AppFabric緩存服務崩潰
- 12. WCF緩存服務器端
- 13. WCF服務緩存數據?
- 14. 不能subscripe緩存服務
- 15. IIS緩存和Web服務
- 16. 緩存與分析服務
- 17. 服務器端緩存
- 18. 瞭解Azure緩存服務
- 19. 服務人員,雙緩存?
- 20. ASP.NET web服務緩存
- 21. Ehcache緩存服務器+ BlockingCache?
- 22. ServiceStack網絡服務緩存
- 23. Web服務 - 緩存更新
- 24. Apache Web服務器緩存
- 25. Windows服務器AppFabric緩存
- 26. Silverstripe - Restful服務器緩存
- 27. 服務器緩存IIS6
- 28. WCF REST JSON服務緩存
- 29. 緩存與JSP和HTML5:如何禁用緩存服務器端
- 30. Vert.x與Rx-Java實現服務調用的緩存
我想你沒有得到這個問題,我需要知道是否有解決方案來創建一個表示方法調用的緩存鍵(字符串)及其返回值。例如緩存SomeMethod(param1,param2),但尋找能夠緩存具有任意數量參數的任何方法的通用解決方案 – Ehsan 2012-04-09 11:17:01
我已經添加了一個基於ProxyBase類的緩存調用的示例CachingProxy 。 –
sisve
2012-04-09 14:01:12
基於MSDN文檔GetHashCode方法對於創建唯一的哈希鍵是不可靠的,如果我們說我們應該爲每個類型實現此方法,我認爲這也是一種不好的做法http://msdn.microsoft.com/zh-cn/ us/library/system.object.gethashcode.aspx第3行的備註部分 – Ehsan 2012-04-09 18:38:46