我在这一个上打了一堵墙。我有一个WCF库与各自的WCF Web服务。沙盒Web应用程序尝试从此服务中启动一个方法。WCF和FluentNHibernate
但是,该服务会在请求发出时记录请求。这里的持久层是用FluentNHibernate构建的。 Web应用程序中的会话管理在过去一直很直接(即HttpModules),但在WCF中对我来说有点棘手。
我遵循笔记和IglooCommons library的示例,并将以下行添加到我的global.asax(驻留在Web服务目录中)。
protected void Application_Start(object sender, EventArgs e)
{
NHibernateFactory.Initialize(new SessionFactory().BuildSessionFactory());
}
BuildSessionFactory返回以下内容:(。* SVC)
public class SessionFactory
{
public SessionFactory() { }
public ISessionFactory BuildSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration
.MsSql2005
.ConnectionString(x =>
x.FromConnectionStringWithKey("myConnection"))
.ShowSql()
.CurrentSessionContext<WebSessionContext>())
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<OneClass>()
.AddFromAssemblyOf<AnotherClass>()
.Conventions.Add(
PrimaryKey.Name.Is(x => x.EntityType.Name + "ID"),
ForeignKey.EndsWith("ID"),
Table.Is(x => Inflector.Net.Inflector.Pluralize(x.EntityType.Name))))
.BuildSessionFactory();
}
}
服务页面加载到其舒缓的股票蓝色的 “生成的类使用WSDL” 页面,没有问题。
当引用此Web应用程序试图调用服务的方法,
NHibernateContext.Current().Session
无法找到任何实时会话。在逐步完成应用程序之后,global.asax中的app start方法正在被解雇,但在任何需要它的操作之前似乎正在死亡(这是一种猜测)。
我意识到IglooCommons可能有点特定,因为NHibernateContext是一个专有库,但是,带有持久层的WCF并不少见。任何想到我错过了什么或另一个方向采取非常感谢。
附加说明:
使用这项服务的Web应用程序,我创建了这是基于WSDL,自动生成使用SvcUtil工具的“互操作”库。 Web应用程序和Web服务之间没有Web引用,只是使用自动生成类的Web应用程序。
重新标记,因为流利,NHibernate的是一个既定的标签 – ddc0660 2009-11-05 18:43:49