From: <dav...@us...> - 2009-08-19 19:44:07
|
Revision: 4698 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4698&view=rev Author: davybrion Date: 2009-08-19 19:43:56 +0000 (Wed, 19 Aug 2009) Log Message: ----------- NH-1935 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Context/WcfOperationSessionContext.cs Added: trunk/nhibernate/src/NHibernate/Context/WcfOperationSessionContext.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Context/WcfOperationSessionContext.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Context/WcfOperationSessionContext.cs 2009-08-19 19:43:56 UTC (rev 4698) @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using System.ServiceModel; + +using NHibernate.Engine; + +namespace NHibernate.Context +{ + /// <summary> + /// Provides a <see cref="ISessionFactory.GetCurrentSession()">current session</see> + /// for the current OperationContext in WCF. Works only during the lifetime of a WCF operation. + /// </summary> + public class WcfOperationSessionContext : MapBasedSessionContext + { + public WcfOperationSessionContext(ISessionFactoryImplementor factory) : base(factory) {} + + private static WcfStateExtension WcfOperationState + { + get + { + var extension = OperationContext.Current.Extensions.Find<WcfStateExtension>(); + + if (extension == null) + { + extension = new WcfStateExtension(); + OperationContext.Current.Extensions.Add(extension); + } + + return extension; + } + } + + protected override IDictionary GetMap() + { + return WcfOperationState.Map; + } + + protected override void SetMap(IDictionary value) + { + WcfOperationState.Map = value; + } + } + + public class WcfStateExtension : IExtension<OperationContext> + { + public IDictionary Map { get; set; } + + // we don't really need implementations for these methods in this case + public void Attach(OperationContext owner) { } + public void Detach(OperationContext owner) { } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-08-18 05:51:57 UTC (rev 4697) +++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-08-19 19:43:56 UTC (rev 4698) @@ -1154,6 +1154,8 @@ return new WebSessionContext(this); case "managed_web": return new ManagedWebSessionContext(this); + case "wcf_operation": + return new WcfOperationSessionContext(this); } try Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-08-18 05:51:57 UTC (rev 4697) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-08-19 19:43:56 UTC (rev 4698) @@ -62,6 +62,9 @@ </Reference> <Reference Include="System.Data" /> <Reference Include="System.Data.OracleClient" /> + <Reference Include="System.ServiceModel"> + <RequiredTargetFramework>3.0</RequiredTargetFramework> + </Reference> <Reference Include="System.Transactions" /> <Reference Include="System.Web" /> <Reference Include="System.Xml" /> @@ -490,6 +493,7 @@ <Compile Include="Cfg\MappingSchema\HbmTimestamp.cs" /> <Compile Include="Cfg\MappingSchema\HbmVersion.cs" /> <Compile Include="Cfg\MappingSchema\IDecoratable.cs" /> + <Compile Include="Context\WcfOperationSessionContext.cs" /> <Compile Include="Criterion\GroupedProjection.cs" /> <Compile Include="Criterion\IPropertyProjection.cs" /> <Compile Include="Criterion\QueryOverFetchBuilder.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |