我们已经为我们的Web应用程序实现了AppFabric Windows Server Cache.最初,我们能够毫无问题地使用缓存.然后我们将流量增加了大约100倍,并开始出现间歇性异常.例外情况大约每2天发生一次,大约每分钟发生一次.
我们的配置:
错误按顺序发生(在1分钟内,九个Web服务器中的每一个都会发生异常):
System.Net.Sockets.SocketException:远程主机Microsoft.ApplicationServer.Caching.DataCacheException强制关闭现有连接: ErrorCode<ERRCA0016>:SubStatus<ES0001>:The connection was terminated, possibly due to server or network problems or serialized Object size is greater than MaxBufferSize on server. Result of the request is unknown. ---> System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or …
我正在开发一个代码库,由于多个团队成员使用不同的编辑器(以及默认设置)进行开发,因此散布了一些unicode编码文件.我想通过查找所有unicode编码文件并将它们转换回ANSI编码来清理我们的代码库.
任何关于如何完成这项任务的"发现"部分的想法都将得到真正的体会.
我正在尝试为我的EF存储库实现一个缓存方案,类似于此处的博客.正如作者和评论者所报告的那样,限制是密钥生成方法无法生成随给定查询的参数而变化的缓存键.这是缓存密钥生成方法:
private static string GetKey<T>(IQueryable<T> query)
{
string key = string.Concat(query.ToString(), "\n\r",
typeof(T).AssemblyQualifiedName);
return key;
}
Run Code Online (Sandbox Code Playgroud)
因此,以下查询将生成相同的缓存键:
var isActive = true;
var query = context.Products
.OrderBy(one => one.ProductNumber)
.Where(one => one.IsActive == isActive).AsCacheable();
Run Code Online (Sandbox Code Playgroud)
和
var isActive = false;
var query = context.Products
.OrderBy(one => one.ProductNumber)
.Where(one => one.IsActive == isActive).AsCacheable();
Run Code Online (Sandbox Code Playgroud)
请注意,唯一的区别在于isActive = true
第一个查询和isActive = false
第二个查询.
任何有效生成因IQueryable
参数而异的缓存键的建议/见解都将得到真正的体会.
感谢Sergey Barskiy分享EF CodeFirst缓存方案.
我采用了遍历IQueryable表达式树的方法,目的是解析查询中使用的参数值.根据maxlego的建议,我扩展了System.Linq.Expressions.ExpressionVisitor类来访问我们感兴趣的表达式节点 - 在本例中是MemberExpression.更新的GetKey
方法如下所示:
public …
Run Code Online (Sandbox Code Playgroud) caching entity-framework iqueryable repository ef-code-first
关于如何使用Google Closure Compiler结合多个JavaScript文件而不进行任何优化的任何想法?具体来说,我们希望使用Closure来部署我们的组合站点JavaScript的两个版本:发布和调试.要发布,我们正在使用--compilation_level SIMPLE_OPTIMIZATIONS --manage_closure_dependencies
它按预期工作.但是,对于调试,我们希望我们的JavaScript完整/未修改地组合以便于调试.似乎最优化的水平是WHITESPACE_ONLY
,任何想法都将受到赞赏.
除了Secondaries=1
在集群配置中设置启用HighAvailability 之外还有什么内容,特别是在缓存客户端配置上吗?
我们的配置:
使用about配置,我们可以看到在三台主机上创建的主区域和辅助区域,但是当其中一台主机停止时,会发生以下异常:
ErrorCode<ERRCA0018>:SubStatus<ES0001>:The request timed out.
An existing connection was forcibly closed by the remote host
No connection could be made because the target machine actively refused it 192.22.0.34:22233
An existing connection was forcibly closed by the remote host
高可用性是否能够在不中断服务的情况下处理主机停机?我们正在使用一个命名区域 - 这会破坏高可用性吗?我在某处读到命名区域只能存在于一个主机上(我确实验证了另一个主机上存在辅助区域).我觉得我们缺少一些缓存客户端配置可以实现高可用性,任何有关此事的见解都将非常感激.
appfabric ×2
caching ×1
iqueryable ×1
javascript ×1
repository ×1
search ×1
unicode ×1
windows ×1