WCF中的单例模式

3
在WCF应用程序中使用单例模式是否明智?我有一个ServiceResponse类,它将处理响应和错误详细信息以及WCF当前请求的几乎所有详细信息。当我第一次访问服务时,假设在ServiceResponse类中有5个属性,并且这些属性都已填入相应的值以及某些错误详细信息。对于下一次访问,假设我没有获得任何错误详细信息,但是其他4个属性都被填充了。
但是问题在于,错误详细信息属性仍然填充有先前的值,我认为即使在后续请求后也没有创建单例对象。因此,只有更改的值受到影响,但未触及的属性仍保留着以前的值,供后续请求使用。
这是因为应用程序域永远不会卸载以释放对象,从而允许下一个单例对象为其他立即请求创建吗?如何在WCF中实现单例模式?感谢您的帮助。

你是指将单例注入到你的服务中,例如用于缓存,还是使用InstanceContextMode = Single(http://msdn.microsoft.com/en-us/magazine/cc163590.aspx)? - StuartLC
2个回答

3
单例模式意味着对象仅实例化一次并在整个AppDomain生命周期内存在。不应将特定于给定请求的数据存储在静态对象中,因为它们都将共享相同的数据,这可能不是您想要的结果。
在WCF应用程序中使用静态对象是否是一个好主意完全取决于您的情况和需要在那里存储的内容。由于WCF是一个多线程环境,多个线程可以访问该共享数据,因此必须通过使用适当的同步机制来确保该数据是线程安全的。
有一个单独的AppDomain,当您的应用程序启动时会创建它。不要期望在每个请求上获得不同的AppDomain。请求将从同一AppDomain中提供服务,直到IIS回收应用程序为止。

0
几乎包含了WCF当前请求的所有细节。
这不是一个单例。单例将被定义为在所有请求之间共享。您需要创建一个实例,该实例将在整个请求或连接上下文中存在。创建对象的实例,并在第一次需要时将其存储在相关的请求/连接缓存中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接