@@ -663,16 +663,16 @@ public override async Task CreateUninitializedItemAsync(
663
663
throw new ArgumentNullException ( "id" ) ;
664
664
}
665
665
666
- byte [ ] buf ;
666
+ string encodedBuf ;
667
667
668
668
var item = new SessionStateStoreData ( new SessionStateItemCollection ( ) ,
669
669
GetSessionStaticObjects ( context . ApplicationInstance . Context ) ,
670
670
timeout ) ;
671
671
672
- SerializeStoreData ( item , out buf , s_compressionEnabled ) ;
672
+ SerializeStoreData ( item , out encodedBuf , s_compressionEnabled ) ;
673
673
674
674
var timeoutInSecs = 60 * timeout ;
675
- await CreateSessionStateItemAsync ( id , timeoutInSecs , buf , true ) ;
675
+ await CreateSessionStateItemAsync ( id , timeoutInSecs , encodedBuf , true ) ;
676
676
}
677
677
678
678
/// <inheritdoc />
@@ -776,7 +776,7 @@ public override async Task SetAndReleaseItemExclusiveAsync(
776
776
bool newItem ,
777
777
CancellationToken cancellationToken )
778
778
{
779
- byte [ ] buf ;
779
+ string encodedBuf ;
780
780
int lockCookie ;
781
781
782
782
if ( item == null )
@@ -790,7 +790,7 @@ public override async Task SetAndReleaseItemExclusiveAsync(
790
790
791
791
try
792
792
{
793
- SerializeStoreData ( item , out buf , s_compressionEnabled ) ;
793
+ SerializeStoreData ( item , out encodedBuf , s_compressionEnabled ) ;
794
794
}
795
795
catch
796
796
{
@@ -804,15 +804,15 @@ public override async Task SetAndReleaseItemExclusiveAsync(
804
804
805
805
if ( newItem )
806
806
{
807
- await CreateSessionStateItemAsync ( id , s_timeout , buf , false ) ;
807
+ await CreateSessionStateItemAsync ( id , s_timeout , encodedBuf , false ) ;
808
808
}
809
809
else
810
810
{
811
811
var spLink = UriFactory . CreateStoredProcedureUri ( s_dbId , s_collectionId , UpdateSessionStateItemSPID ) ;
812
812
var spResponse = await ExecuteStoredProcedureWithWrapperAsync < object > ( spLink , CreateRequestOptions ( id ) ,
813
813
//sessionId, lockCookie, timeout, sessionItem
814
814
// SessionStateStoreData.Timeout is in minutes, TTL in DocumentDB is in seconds
815
- id , lockCookie , 60 * item . Timeout , buf ) ;
815
+ id , lockCookie , 60 * item . Timeout , encodedBuf ) ;
816
816
817
817
CheckSPResponseAndThrowIfNeeded ( spResponse ) ;
818
818
}
@@ -1156,14 +1156,14 @@ internal static async Task<IStoredProcedureResponse<TValue>> ExecuteStoredProced
1156
1156
}
1157
1157
}
1158
1158
1159
- internal async Task CreateSessionStateItemAsync ( string sessionid , int timeoutInSec , byte [ ] ssItems , bool uninitialized )
1159
+ internal async Task CreateSessionStateItemAsync ( string sessionid , int timeoutInSec , string encodedSsItems , bool uninitialized )
1160
1160
{
1161
1161
if ( PartitionEnabled )
1162
1162
{
1163
1163
var spLink = UriFactory . CreateStoredProcedureUri ( s_dbId , s_collectionId , CreateSessionStateItemInPartitionSPID ) ;
1164
1164
var spResponse = await ExecuteStoredProcedureWithWrapperAsync < object > ( spLink , CreateRequestOptions ( sessionid ) ,
1165
1165
// sessionId, partitionValue, timeout, lockCookie, sessionItem, uninitialized
1166
- sessionid , CreatePartitionValue ( sessionid ) , timeoutInSec , DefaultLockCookie , ssItems , uninitialized ) ;
1166
+ sessionid , CreatePartitionValue ( sessionid ) , timeoutInSec , DefaultLockCookie , encodedSsItems , uninitialized ) ;
1167
1167
1168
1168
CheckSPResponseAndThrowIfNeeded ( spResponse ) ;
1169
1169
}
@@ -1172,7 +1172,7 @@ internal async Task CreateSessionStateItemAsync(string sessionid, int timeoutInS
1172
1172
var spLink = UriFactory . CreateStoredProcedureUri ( s_dbId , s_collectionId , CreateSessionStateItemSPID ) ;
1173
1173
var spResponse = await ExecuteStoredProcedureWithWrapperAsync < object > ( spLink , CreateRequestOptions ( sessionid ) ,
1174
1174
// sessionId, timeout, lockCookie, sessionItem, uninitialized
1175
- sessionid , timeoutInSec , DefaultLockCookie , ssItems , uninitialized ) ;
1175
+ sessionid , timeoutInSec , DefaultLockCookie , encodedSsItems , uninitialized ) ;
1176
1176
1177
1177
CheckSPResponseAndThrowIfNeeded ( spResponse ) ;
1178
1178
}
@@ -1186,7 +1186,7 @@ private static void CheckSPResponseAndThrowIfNeeded<T>(IStoredProcedureResponse<
1186
1186
}
1187
1187
}
1188
1188
// Internal code copied from SessionStateUtility
1189
- internal static void SerializeStoreData ( SessionStateStoreData item , out byte [ ] buf , bool compressionEnabled )
1189
+ internal static void SerializeStoreData ( SessionStateStoreData item , out string encodedBuf , bool compressionEnabled )
1190
1190
{
1191
1191
using ( MemoryStream s = new MemoryStream ( ) )
1192
1192
{
@@ -1206,10 +1206,20 @@ internal static void SerializeStoreData(SessionStateStoreData item, out byte[] b
1206
1206
// This shouldn't happen, but to be sure, we are padding with an extra byte
1207
1207
s . WriteByte ( ( byte ) 0xff ) ;
1208
1208
}
1209
- buf = s . GetBuffer ( ) ;
1209
+ encodedBuf = GetEncodedStringFromMemoryStream ( s ) ;
1210
1210
}
1211
1211
}
1212
1212
1213
+ private static string GetEncodedStringFromMemoryStream ( MemoryStream s )
1214
+ {
1215
+ ArraySegment < byte > bytes = new ArraySegment < byte > ( ) ;
1216
+
1217
+ if ( ! s . TryGetBuffer ( out bytes ) )
1218
+ return null ;
1219
+
1220
+ return Convert . ToBase64String ( bytes . Array , bytes . Offset , bytes . Count ) ;
1221
+ }
1222
+
1213
1223
private static void Serialize ( SessionStateStoreData item , Stream stream )
1214
1224
{
1215
1225
bool hasItems = true ;
0 commit comments