使用RavenDB时,后续ServiceStack OAuth尝试失败(UnuniqueObjectException)
我正在尝试使用ServiceStack身份验证插件以及RavenDB和RavenUserAuthRepository包 AppHost使用RavenDB时,后续ServiceStack OAuth尝试失败(UnuniqueObjectException),oauth,servicestack,ravendb,Oauth,servicestack,Ravendb,我正在尝试使用ServiceStack身份验证插件以及RavenDB和RavenUserAuthRepository包 AppHost var store = new DocumentStore() { ConnectionStringName = "ServiceStackAuthSample" } .Initialize(); IndexCreation.CreateIndexes(typeof
var store = new DocumentStore()
{
ConnectionStringName = "ServiceStackAuthSample"
}
.Initialize();
IndexCreation.CreateIndexes(typeof(RavenUserAuthRepository).Assembly, store);
container.Register(store);
var session = container.Resolve<IDocumentStore>().OpenSession();
container.Register(p => session).ReusedWithin(ReuseScope.Request);
container.Register<IUserAuthRepository>(p => new RavenUserAuthRepository(p.Resolve<IDocumentStore>(), p.Resolve<IDocumentSession>()));
旧的
public UserAuth GetUserAuth(string userAuthId)
{
using (var session = documentStore.OpenSession())
{
int intAuthId;
return int.TryParse(userAuthId, out intAuthId)
? session.Load<UserAuth>(intAuthId)
: session.Load<UserAuth>(userAuthId);
}
}
public UserAuth GetUserAuth(string userAuthId)
{
using (_session)
{
int intAuthId;
return int.TryParse(userAuthId, out intAuthId)
? _session.Load<UserAuth>(intAuthId)
: _session.Load<UserAuth>(userAuthId);
}
}
public UserAuth GetUserAuth(字符串userAuthId)
{
使用(var session=documentStore.OpenSession())
{
int intAuthId;
返回int.TryParse(userAuthId,out intAuthId)
?会话加载(intAuthId)
:session.Load(userAuthId);
}
}
固定的
public UserAuth GetUserAuth(string userAuthId)
{
using (var session = documentStore.OpenSession())
{
int intAuthId;
return int.TryParse(userAuthId, out intAuthId)
? session.Load<UserAuth>(intAuthId)
: session.Load<UserAuth>(userAuthId);
}
}
public UserAuth GetUserAuth(string userAuthId)
{
using (_session)
{
int intAuthId;
return int.TryParse(userAuthId, out intAuthId)
? _session.Load<UserAuth>(intAuthId)
: _session.Load<UserAuth>(userAuthId);
}
}
public UserAuth GetUserAuth(字符串userAuthId)
{
使用(\u会话)
{
int intAuthId;
返回int.TryParse(userAuthId,out intAuthId)
?_session.Load(intAuthId)
:_session.Load(userAuthId);
}
}
这将导致createOrgerAuthSession通过一个会话实例(通过GetUserAuth)获取UserAuth,然后使用私有会话成员保存UserAuth,从而导致冲突
谢谢你的提示,大卫 我不熟悉您在这里展示的ServiceStack DI API,但在我看来,您正在创建和注册一个DocumentStore(这很好),然后还创建了一个IDocumentSession并只注册了该实例。每个请求都应该有一个唯一的IDocumentSession实例,因此需要将容器配置为每个请求都将调用DocumentStore的OpenSession方法。我不熟悉您在这里展示的ServiceStack DI API,但在我看来,您正在创建并注册一个DocumentStore(这很好)然后还要创建一个IDocumentSession并只注册该实例。每个请求都应该有一个唯一的IDocumentSession实例,因此需要配置容器,以便每个请求都调用DocumentStore的OpenSession方法