|
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.
|