using System; using System.Collections.Generic; using System.IdentityModel.Tokens; using System.Threading; namespace MyCompany.MyProject.ServiceModel.Description { /// /// Helper class used as cache for security tokens /// internal static class TokenCacheHelper { private const int DefaultTimeout = 1000; private static readonly Dictionary tokens = new Dictionary(); private static readonly ReaderWriterLock tokenLock = new ReaderWriterLock(); public static SecurityToken GetToken(Uri key) { tokenLock.AcquireReaderLock(DefaultTimeout); try { SecurityToken token; tokens.TryGetValue(key, out token); return token; } finally { tokenLock.ReleaseReaderLock(); } } public static void AddToken(Uri key, SecurityToken token) { tokenLock.AcquireWriterLock(DefaultTimeout); try { if (tokens.ContainsKey(key)) tokens.Remove(key); tokens.Add(key, token); } finally { tokenLock.ReleaseWriterLock(); } } } }