2012-08-30 48 views
2

我嘗試了在MVC4應用程序中的Appharbor的Redis。我正在使用ServiceStack C# client for Redis。從ServiceStack.Redis使用RedisClient時,一切正常。但是,因爲我只打算使用Redis進行緩存,所以我試圖連接ServiceStack提供的ICacheClient作爲包裝。這裏是我的StructureMap配置(https://github.com/ServiceStack/ServiceStack/wiki/Caching):PooledRedisClientManager拋出與Appharbor Redis的URL

x.For<IRedisClientsManager>().Use(() => new PooledRedisClientManager(redisUrl)); 
x.For<ICacheClient>().Use(c => c.GetInstance<IRedisClientsManager>().GetCacheClient()); 

我的問題是,PooledRedisClientManager拋出錯誤,「input string was not in a correct format」當我用Appharbor提供Redis的到去URL。這裏是什麼樣子:

redis://redistogo-appharbor:[email protected]:9081/ 

如果我更換Redis的對去URL與localhost:5051一切正常。 我錯過了什麼?

回答

1

前綴redis://不是任何已知的redis約定 - 它必須是RedisToGo或AppHarbor約定。

ServiceStack的C#RedisClient支持標準的 「密碼@主機:端口」 約定,e.g:

container.Register(c => new PooledRedisClientManager(
    "redistogo-appharbor:[email protected]:9081" 
)); 
+0

不起作用。我嘗試了密碼@主機:端口,沒有成功....你有其他選擇嗎? – jaxxbo

+0

不起作用,但被標記爲接受....嗯。 – ganders

0

事情是這樣的工作對我來說:

container.Register(c => new PooledRedisClientManager(
    @"[email protected]:9081" 
)); 
0

一些試驗後和錯誤這個工程。

string redisUrl = ConfigurationManager.AppSettings["REDISTOGO_URL"].Replace("redis://", "").Replace("redistogo:","").Replace("/", ""); 
ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container)); 
SetConfig(new HostConfig{HandlerFactoryPath = "api"}); 
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager(redisUrl)); 
container.Register<IDbRepository>(r => new DbRepository(r.Resolve<IRedisClientsManager>()));