
[英]Running WCF Windows Service as InstanceContextMode.PerCall
[英]Will InstanceContextMode.PerCall in WCF instantiate all static variables/methods?
在我的WCF代码中,用户的ID和名称存储在静态变量中。 它是从HttpContext.Current.User.Identity.Name和数据库命中检索的。 另外还有其他静态变量来存储连接字符串,与日志文件相关的内容等。
最近,我发现自己处于竞争状态,当第一个呼叫仍在处理时,来自客户端的第二个呼叫设置了用户名。 这导致第一呼叫读取由第二呼叫更新的用户数据。
为避免这种情况,我阅读了InstanceContextMode.PerCall以及它如何使静态变量在每次调用时都表现为非静态。
我的问题是
1)如果我使用InstanceContextMode.PerCall,这是否意味着它将实例化所有静态变量和方法? 我打算仅使用此功能来获取每个呼叫的新用户数据。 但是,我认为这还将为连接字符串静态变量,日志文件和其他静态变量创建一个新实例。 这个对吗? 是否会影响性能(再次从web.config等读取)?
2)有没有一种方法可以使用InstanceContextMode.PerCall但只能为与用户数据相关的静态变量创建实例,并保留与连接字符串相关的静态变量?
3)一旦调用完成,是否必须强制使用dispose方法(实现IDispose)来处置静态变量?
首先不确定为什么要将所有这些数据放在静态变量中? 看起来像是一个不好的设计。 当您说InstanceContextMode.PerCall
; 据我了解,每个调用都有一个单独的数据副本,并且每个调用都是唯一的。
如果您不希望修改数据,请尝试将其声明为static readonly
。 最后,您应该选择更好的设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.