2

ServiceStack で UserAuth 永続化のために Redis を使用する方法を学ぼうとしています。

Global.asax.cs 内に次のコードがあります。

public class HelloAppHost : AppHostBase
{
    public HelloAppHost() : base("Hello Web Services", typeof(HelloService).Assembly) {}

    public override void Configure(Funq.Container container)
    {
        container.Register<ICacheClient>(new MemoryCacheClient());

        Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
            new CredentialsAuthProvider()
        }));
        container.Register(c => new PooledRedisClientManager(
            "127.0.0.1:6379"
        ));
        container.Register<IUserAuthRepository>(
            c => new RedisAuthRepository(c.Resolve<PooledRedisClientManager>()));
    }
}

TCP/6379 (Deb7 パッケージから) でローカルに公開されている Redis のデフォルトのインストール/構成があります。

認証サービスを呼び出すと、次のエラーが表示されます。

Response Status

Error Code RedisResponseException
MessageZero length respose, sPort: 65470, LastCommand: 
Stack Trace[Auth: 07/06/2013 17:29:08]: [REQUEST: {UserName:test,Password:test}]
ServiceStack.Redis.RedisResponseException: Zero length respose, sPort: 65470, LastCommand: at 
ServiceStack.Redis.RedisNativeClient.CreateResponseError(String error) at 
ServiceStack.Redis.RedisNativeClient.ParseSingleLine(String r) at 
ServiceStack.Redis.RedisNativeClient.ReadData() at 
ServiceStack.Redis.RedisNativeClient.SendExpectData(Byte[][] cmdWithBinaryArgs) at 
ServiceStack.Redis.RedisNativeClient.HGet(String hashId, Byte[] key) at 
ServiceStack.Redis.RedisClient.GetValueFromHash(String hashId, String key) at 
ServiceStack.ServiceInterface.Auth.RedisClientManagerFacade.RedisClientFacade.GetValueFromHash(String hashId, String key) at 
ServiceStack.ServiceInterface.Auth.RedisAuthRepository.GetUserAuthByUserName(IRedisClientFacade redis, String userNameOrEmail) at 
ServiceStack.ServiceInterface.Auth.RedisAuthRepository.GetUserAuthByUserName(String userNameOrEmail) at 
ServiceStack.ServiceInterface.Auth.RedisAuthRepository.TryAuthenticate(String userName, String password, UserAuth& userAuth) at 
ServiceStack.ServiceInterface.Auth.CredentialsAuthProvider.TryAuthenticate(IServiceBase authService, String userName, String password) at 
ServiceStack.ServiceInterface.Auth.CredentialsAuthProvider.Authenticate(IServiceBase authService, IAuthSession session, String userName, String password, String referrerUrl) at 
ServiceStack.ServiceInterface.Auth.CredentialsAuthProvider.Authenticate(IServiceBase authService, IAuthSession session, Auth request) at 
ServiceStack.ServiceInterface.Auth.AuthService.Authenticate(Auth request, String provider, IAuthSession session, IAuthProvider oAuthConfig) at 
ServiceStack.ServiceInterface.Auth.AuthService.Post(Auth request) at 
ServiceStack.ServiceInterface.Auth.AuthService.Get(Auth request) at 
lambda_method(Closure , Object , Object ) at ServiceStack.ServiceHost.ServiceRunner`1.Execute(IRequestContext requestContext, Object instance, TRequest request)

このエラーの原因は何ですか?

次のいずれかではないかと思います。

-どうにかして Redis をセットアップする必要がありますか? - Global.asax.cs 内に間違いはありますか? - 他に何か足りないものはありますか? -私は完全に間違った方向に進んでいますか?!

ありがとう!

4

1 に答える 1

1

他の誰かがこの問題を抱えている場合、これはクライアントとサーバー間のバージョンの不一致が原因のようです (debian 7 安定パッケージは古い 2.4.x ブランチのものです)。2.6.13 ソースからサーバーを構築しましたが、すべて問題ないようです。

于 2013-06-08T10:20:11.027 に答える