代码之家  ›  专栏  ›  技术社区  ›  Alexis Abril

WCF和FluentNHibernate

  •  2
  • Alexis Abril  · 技术社区  · 15 年前

    我在这件事上遇到了麻烦。我有一个WCF库和相应的WCF web服务。沙盒web应用程序尝试从此服务触发一个方法。

    但是,该服务将在请求发出时记录请求。这里的持久层是用FluentNHibernate构建的。web应用程序中的会话管理在过去非常简单(即HttpModules),但在WCF中它对我来说有点棘手。

    我按照注释和示例使用 IglooCommons library

        protected void Application_Start(object sender, EventArgs e)
        {
            NHibernateFactory.Initialize(new SessionFactory().BuildSessionFactory());
        }
    

    BuildSessionFactory返回以下内容:

    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();
        }
    }
    

    当引用此的web应用程序尝试调用服务方法时,

    NHibernateContext.Current().Session
    

    找不到任何实时会话。在单步执行应用程序之后,global.asax中的app start方法将被触发,但是在任何需要它的操作之前,它似乎正在消亡(这是一个猜测)。

    补充说明:

    对于使用此服务的web应用程序,我创建了一个基于wsdl的“互操作”库,该库使用svcutil自动生成。web应用和web服务之间没有web引用,只有使用auto gen类的web应用。

    4 回复  |  直到 15 年前
        1
  •  0
  •   Drew Marsh    15 年前

    1. AspNetCompatibilityRequirementsAttribute 为您服务 AspNetCompatibilityRequirementsMode 当然是必需的。
    2. 请在WCF web.config中配置宿主环境,如下所示:

      <system.serviceModel>
          <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
          <!-- rest of config here -->
      </system.serviceModel>
      

    More information about WCF Service hosting with ASP.NET is available here in the MSDN documentation .

        2
  •  0
  •   Alexis Abril    15 年前

    作为旁注,这里提供的其他解决方案在扩展我对WCF的内部工作及其与NHibernate的交互所知甚少方面非常出色。

        3
  •  0
  •   frank.m    12 年前

    [NHibernateContext(Rollback.Automatically)]
    public class YourWcfService : IYourWcfService