문제

ServiceSack MVC 스타터 팩 (Myget에서 버전 4.0.12 버전)을 설치 한 브랜드의 새로운 MVC4 프로젝트가 있습니다. 서비스 스택 세션의 사용을 부트 스트랩합니다.

AppHost에서 내 사용자 정의 세션이 다음과 같이 구성됩니다.

Plugins.Add(new AuthFeature(() => new CustomUserSession(),
    new IAuthProvider[] {
        new CredentialsAuthProvider(config)
    }));
.

사용자 정의 세션은 테스트 목적으로 다음과 같습니다.

public class CustomUserSession : AuthUserSession
{
    public string Hello { get; set; }
}   
.

ICacheClient는 redis 클라이언트로 등록됩니다.

// register the message queue stuff 
var redisClients = config.Get("redis-servers", "redis.local:6379").Split(',');
var redisFactory = new PooledRedisClientManager(redisClients);
var mqHost = new RedisMqServer(redisFactory, retryCount: 2);
container.Register<IRedisClientsManager>(redisFactory); // req. to l
container.Register<IMessageFactory>(mqHost.MessageFactory);

container.Register<ICacheClient>(c =>
                        (ICacheClient)c.Resolve<IRedisClientsManager>()
                        .GetCacheClient())
                        .ReusedWithin(Funq.ReuseScope.None);      
.

단순성을 위해 ControllerBase를 생성하여 각 요청에 대한 사용자 정의 세션을 저장하고 저장합니다.

public abstract class ControllerBase :  ServiceStackController<CustomUserSession>
{
    protected override IAsyncResult BeginExecute (System.Web.Routing.RequestContext requestContext, AsyncCallback callback, object state)
    {
        ViewBag.Session = this.UserSession;
        return base.BeginExecute (requestContext, callback, state);
    }

    protected override void EndExecute(IAsyncResult asyncResult)
    {
        SaveSession(null);

        base.EndExecute(asyncResult);
    }
    public void SaveSession(TimeSpan? expiresIn = null)
    {
        Cache.CacheSet(SessionFeature.GetSessionId(), UserSession, expiresIn ?? new TimeSpan(0, 30, 0));
    }
}
.

i는 Hello 속성을 수정하여 내 작업 중 하나에서 "World"를 읽으므로 값이 올바르게 발생한 SaveSession 메소드의 중단 점으로 분명히 볼 수 있습니다. 그러나 페이지를 다시로드하고로드 된 세션을 검사하면 아무것도 설정되지 않습니다. 또한 Redis 데이터베이스를보고 다음 BLOB가 저장됩니다.

{
   "createdAt": "/Date(-62135596800000-0000)/",
   "lastModified": "/Date(-62135596800000-0000)/",
   "providerOAuthAccess": [],
   "isAuthenticated": true,
   "tag": 0
}
.

사용자 정의 속성을 저장하지 않습니다 . 누구든지 잘못 / 누락 된 것을 말해 줄 수 있습니까?

=== update===

Base AuthUserSession에서 속성을 변경하면 해당 속성의 변경 사항을 변경하십시오. 은 지속됩니다. 그래서 SS는 어떻게 든 내 콘크리트 유형에서 속성을 무시하기로 결정합니다.

도움이 되었습니까?

해결책

authUserSession이 DataContract이기 때문에 속성이 v4에서 상속되므로 각 멤버를 [DataMember], e.g :

로 표시해야합니다.
public class CustomUserSession : AuthUserSession
{
    [DataMember]
    public string Hello { get; set; }
}   
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top