在wcf应用程序中使用单例模式是否可取?我有ServiceResponse类,它会关注响应和errordetail以及wcf当前请求的几乎所有细节。当我第一次点击服务时,假设我在ServiceResponse类中有5个属性,并且在errordetail属性中填充了相应的值和一些错误详细信息。对于下一个点击,让我说我没有得到任何错误的细节,所有其他4个属性都填满了。
但是这里的事情是,errordetail属性仍然填充了先前的值,我认为即使在后续命中之后也不会创建单例对象。因此,只有更改的值受到影响,但未触及的属性仍保留后续命中的先前值。
是因为appdomain永远不会被卸载以释放对象以允许为其他imm创建下一个sinleton对象。请求?如何在wcf中实现单例模式。感谢帮助。
答案 0 :(得分:3)
单例模式意味着该对象仅实例化一次并且在AppDomain的整个生命周期中存在。您不应该在静态对象中存储特定于特定请求的数据,因为它们都将共享可能不是您要查找的相同数据。
在WCF应用程序中使用静态对象是否是个好主意是一个完全取决于您的场景以及您需要在那里存储的内容的问题。由于WCF是一个多线程环境,其中多个线程可以访问此共享数据,因此必须特别注意通过使用适当的同步机制来确保此数据是线程安全的。
是因为appdomain永远不会被卸载以释放对象 允许为其他imm创建下一个sinleton对象。 请求?
应用程序启动时会创建一个AppDomain。不要期望在每个请求上获得不同的AppDomain。请求将全部从同一AppDomain提供,直到IIS回收应用程序为止。
答案 1 :(得分:0)
...几乎所有wcf当前请求的细节。
这不是单身人士。每个定义的单例将在所有请求之间共享。您希望创建一个贯穿整个requets或连接上下文的实例。创建对象的实例,并在第一次需要时将其存储在相关的请求/连接缓存中。