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. 在MonoTouch中缓存Web服务调用
- 2. Lagom:缓存外部服务调用
- 3. Rails 3 - 缓存Web服务调用
- 4. 缓存Web服务
- 5. Intersystems缓存 - 使用缓存服务器页面(Intersystems)通过javascript调用ASHX
- 6. 适用于存储Web服务输出缓存的云服务?
- 7. 服务Googlebot清漆缓存
- 8. Apache Web服务器缓存
- 9. WCF REST JSON服务缓存
- 10. 移动服务缓存
- 11. ASP.NET服务器缓存
- 12. Ehcache缓存服务器+ BlockingCache?
- 13. 服务工作者缓存
- 14. AppFabric缓存服务崩溃
- 15. Windows服务和缓存
- 16. 服务器缓存IIS6
- 17. Web服务 - 缓存更新
- 18. WCF服务缓存数据?
- 19. ServiceStack网络服务缓存
- 20. 服务人员,双缓存?
- 21. 如何调整应用程序服务器中的缓存
- 22. silverlight wcf服务调用可以缓存吗?
- 23. 如何在调用新数据之前缓存服务器调用并测试缓存过期?
- 24. 禁用服务器端缓存ASP.net
- 25. 使用服务器缓存15分钟
- 26. servicestack - 使用redis缓存服务响应
- 27. 在使用web服务时缓存
- 28. 清除Azure应用服务PHP缓存
- 29. 缓存服务是否应该存在?
- 30. ASP.NET服务器端缓存生存期?
我想你没有得到这个问题,我需要知道是否有解决方案来创建一个表示方法调用的缓存键(字符串)及其返回值。例如缓存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