【发布时间】:2010-07-07 08:50:58
【问题描述】:
我在 Sharp Architecture 中使用 Wcf。我已经使用 WcfSessionStorage 等按照北风示例配置了我的项目。我在 wcf 服务中有一个方法,它使用 Repository.GetAll() 获取业务对象列表。我正在使用 WcfTestClient 测试服务方法。第一次调用该方法时,一切正常。但是在随后的调用中,我在 Repository.GetAll() 方法上得到以下异常
[System.ObjectDisposedException]
Session is closed!
Object name: 'ISession'
似乎 NHibernate 会话在每次调用后都会被释放。我通过使用以下属性装饰我的服务解决了这个问题
[ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall )]
public class WcfService : IWcfService
{
}
但是这意味着,每次调用都会创建一个服务实例,这反过来又会创建一个新的休眠会话等。在我的场景中,每次调用都不需要创建一个新的服务实例,我认为这很昂贵过程而不是正确的解决方案。我想知道我的场景中的最佳实践是什么,以及如何通过每次调用创建一个新的服务实例来让这个东西发挥作用。
谢谢 纳比尔
【问题讨论】:
标签: wcf nhibernate s#arp-architecture