【发布时间】:2015-11-19 14:40:58
【问题描述】:
我最近将我们的 ServiceStack 包升级到 v4.0.46(从 v4.0.36 开始),并且我们的应用程序的某些区域使用 ResolveService 在数据库事务中调用另一个服务。以前这一切正常,但升级到 v4.0.46 后,我们收到此错误:
连接必须有效且打开
调用者看起来像这样:
public class DeleteItemService: CustomerServiceBase
{
public object Post(DeleteItem request)
{
WriteDb(conn => {
using (var service = ResolveService<DeleteDocumentsService>()) {
service.Post(new DeleteDocumentsRequest {
Ids = ids.ToArray()
});
}
conn.Delete<Item>(request.Id);
});
return RespondSuccess<ResponseBase>();
}
}
DeleteDocumentsService 看起来有点像这样
public class DeleteDocumentsService: CustomerServiceBase
{
public ILog Log { get; set; }
public PrivateStorage PMStorage { get; set; }
public ResponseBase Post(DeleteDocumentsRequest request)
{
WriteDb(conn => {
var link = conn.Select<DocumentLink>(l => l.DocumentStorageId == item.Id).FirstOrDefault();
conn.Delete<DocumentStorage>(item.Id);
});
return RespondSuccess<ResponseBase>();
}
WriteDb 只是 DB 事务的包装器,看起来像这样:
public void WriteDb(Action<IWriteCustomerDbConnection> action)
{
using (var connRef = ConnectionManager.Open()) {
using (var transRef = ConnectionManager.BeginTrans()) {
action(new CustomerDbConnection(Session, connRef.Conn));
transRef.Commit();
}
}
}
我通读了 ServiceStack 的发行说明,但找不到任何表明 ResolveService 工作方式发生变化的内容。那么任何人都可以阐明可能发生的变化吗?
我意识到这段代码不是最好的,但最好理解为什么它只是在升级到 v4.0.46 后才给我们错误。
【问题讨论】:
标签: c# servicestack ormlite-servicestack