3

是否建议在 wcf 应用程序中使用单例模式?我有 ServiceResponse 类,它将处理 wcf 当前请求的响应和错误详细信息以及几乎所有详细信息。当我第一次点击服务时,假设我在 ServiceResponse 类中有 5 个属性,并且在 errordetail 属性中填充了各自的值和一些错误详细信息。对于下一次命中,假设我没有收到任何错误详细信息,并且所有其他 4 个属性都已填满。

但这里的问题是,errordetail 属性仍然填充了以前的值,我假设即使在随后的命中之后也不会创建单例对象。因此,只有更改的值受到影响,但未触及的属性仍为后续命中保留先前的值。

是不是因为appdomain永远不会被卸载来释放对象以允许为另一个imm创建下一个sinleton对象。要求?否则如何在 wcf 中实现单例模式。感谢帮助。

4

2 回答 2

3

单例模式意味着对象只被实例化一次并且在 AppDomain 的整个生命周期中都存在。您不应将特定于给定请求的数据存储在静态对象中,因为它们都将共享相同的数据,而这些数据可能不是您正在寻找的。

在 WCF 应用程序中使用静态对象是否是一个好主意是一个完全取决于您的方案以及您需要在那里存储的内容的问题。由于 WCF 是一个多线程环境,其中多个线程可以访问此共享数据,因此您必须特别注意通过使用适当的同步机制来确保此数据是线程安全的。

是不是因为appdomain永远不会被卸载来释放对象以允许为另一个imm创建下一个sinleton对象。要求?

当您的应用程序启动时,会创建一个 AppDomain。不要期望在每个请求上获得不同的 AppDomain。请求将全部由同一个 AppDomain 提供,直到应用程序被 IIS 回收。

于 2012-08-27T15:25:00.753 回答
0

...几乎所有 wcf 当前请求的详细信息。

这不是单例。每个定义将在所有请求之间共享一个单例。您想创建一个贯穿整个请求或连接上下文的实例。创建对象的一个​​实例,并在第一次需要时将其存储在相关的请求/连接缓存中。

于 2012-08-27T15:27:52.830 回答