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 内に間違いはありますか? - 他に何か足りないものはありますか? -私は完全に間違った方向に進んでいますか?!
ありがとう!