3

这个问题几乎在标题中,但我会详细说明。

我有一个 Silverlight 应用程序,它充当稍微扩展的用户界面。

我的程序的主要部分将在服务器上运行以保持共享数据库的一致性。

这就是我的问题所在:两个调用 WCF 服务的客户端是否会各自在该服务中获得一个线程,或者他们会分别获得一个完整的 AppDomain 吗?

不同之处在于,如果是第一种情况,他们可以轻松共享数据库,但在第二种情况下,他们不能——据我所知。

编辑:这是因为数据库使用了身份映射模式 [Fowler],其中使用的对象保存在物理内存中(静态单例变量) - 多个 AppDomain 会搞砸。

(在问这个看似简单的问题之前,我问了我的大学老师并进行了相当多的搜索)

4

1 回答 1

1

WCF 服务的线程模型由您为服务配置的 ConcurrencyMode 确定:http: //msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx

关于 AppDomains - 这完全取决于您托管服务的方式。如果您手动运行自己的 ServiceHost,则服务器端始终只有 1 个 AppDomain,除非您决定开始自己管理和启动。

如果您在 IIS 中托管......它取决于 IIS 如何处理请求。它可能会重用 1 个 AppDomain,它可能会启动多个 AppDomain(除非您覆盖 web.config 中的设置以允许每个工作进程仅允许 1 个 AppDomain),或者它可能会启动多个物理工作进程(这本质上意味着多个 AppDomain),如果您启用了网络花园模式。

综上所述,我不确定为什么这会影响您的数据访问策略。多个线程或 AppDomain 共享数据库应该没有问题。

于 2012-04-01T18:55:00.607 回答