This is primarily a bug fix release to resolve issues from the last release that we wanted to get out before the holidays. This release also contains a number of performance improvements added in OrmLite to speed up your Data Access and AutoQuery results.
Other changes in this release include:
New OnSessionFilter​
You can intercept sessions after they've been resolved from the cache and modify them before they're used in
ServiceStack or other application code by overriding OnSessionFilter()
in your AppHost, e.g:
public override IAuthSession OnSessionFilter(IAuthSession session, string withSessionId)
{
// Update User Session
return base.OnSessionFilter(session, withSessionId);
}
This comes in useful when migrating existing sessions and populating properties with custom values.
Registered Type Filters on IAppHost​
To make it easier for plugins to register Typed Filters , their Registration APIs are now available on IAppHost as well, e.g:
public interface IAppHost
{
/// <summary>
/// Add Request Filter for a specific Request DTO Type
/// </summary>
void RegisterTypedRequestFilter<T>(Action<IRequest, IResponse, T> filterFn);
/// <summary>
/// Add Request Filter for a specific Response DTO Type
/// </summary>
void RegisterTypedResponseFilter<T>(Action<IRequest, IResponse, T> filterFn);
/// <summary>
/// Add Request Filter for a specific MQ Request DTO Type
/// </summary>
void RegisterTypedMessageRequestFilter<T>(Action<IRequest, IResponse, T> filterFn);
/// <summary>
/// Add Request Filter for a specific MQ Response DTO Type
/// </summary>
void RegisterTypedMessageResponseFilter<T>(Action<IRequest, IResponse, T> filterFn);
}
RedisReact​
New Windows, OSX, Linux binaries published and http://redisreact.servicestack.net Live Demo updated with this November Release:
Connections with Authentication​
Added support for password authentication when establishing connections with redis.
Custom key console links​
The console link now populates the console with the most appropriate command for each key type, e.g. clicking console
ok a Sorted Set Key (ZSET) populates the Web Console with ZRANGE key 0 -1 WITHSCORES
.
ServiceStack.Redis​
RedisConfig.DefaultMaxPoolSize​
You can easily configure the default pool size for RedisManagerPool
and PooledRedisClientManager
with
a global static configuration, e.g:
RedisConfig.DefaultMaxPoolSize = 200;
Changes:
The RedisManagerPool.MaxPoolSize
property is now read-only to reflect proper usage where it needs to be
specified in the constructor otherwise it's ignored.
New Redis APIs​
New API's added to typed Redis Client to make available API's to resolve cache key for specific types,
deprecate SetEntry*
API's and replace them with more appropriately named SetValue*
, allow typed API
to store and expire typed POCO's in 1 operation:
public interface IRedisClient
{
//Resolve cache key for specific Type and Id
string UrnKey<T>(T value);
string UrnKey<T>(object id);
string UrnKey(Type type, object id);
}
public interface IRedisTypedClient
{
//resolve cache key used for a typed instance
string UrnKey(T value);
//Deprecate SetEntry* API's
[Obsolete("Use SetValue()")]
void SetEntry(string key, T value);
[Obsolete("Use SetValue()")]
void SetEntry(string key, T value, TimeSpan expireIn);
[Obsolete("Use SetValueIfNotExists()")]
bool SetEntryIfNotExists(string key, T value);
//Replaces above SetEntry* API's
void SetValue(string key, T entity);
void SetValue(string key, T entity, TimeSpan expireIn);
bool SetValueIfNotExists(string key, T entity);
bool SetValueIfExists(string key, T entity);
//Save and expire an entity in 1 operation
T Store(T entity, TimeSpan expireIn);
}
ServiceStack.Text​
To improve the usefulness of mocking HTTP Requests, the request body is now passed in the Results Filter so the Request Body can be inspected, e.g:
using (new HttpResultsFilter
{
StringResultFn = (webReq, reqBody) =>
{
if (reqBody != null && reqBody.Contains("{\"a\":1}"))
return "mocked-by-body";
return webReq.RequestUri.ToString().Contains("google")
? "mocked-google"
: "mocked-yahoo";
}
})
{
"http://yahoo.com".PostJsonToUrl(json: "{\"a\":1}") //= mocked-by-body
"http://google.com".GetJsonFromUrl() //= mocked-google
"http://yahoo.com".GetJsonFromUrl() //= mocked-yahoo
}
Previously inspecting the Request Body was not possible. Thanks to @georgehemmings for adding this feature.