- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有人知道在使用事务范围时在多个连接未打开时事务升级到 DTC 的情况。
我知道如果我在一个事务范围内打开多个连接(无论是什么连接字符串),该事务很可能会被提升到 DTC。
知道这一点后,我竭尽全力确保在我的交易中只打开一个连接。
但是,我有一个客户遇到异常
发生错误。 Csla.DataPortalException:DataPortal.Update 失败(基础提供者在打开时失败。) ---> Csla.Reflection.CallMethodException:EditableCategory.DataPortal_Update 方法调用失败 ---> System.Data.EntityException:基础提供者在打开时失败。 ---> System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中为网络访问启用 DTC。 ---> System.Runtime.InteropServices.COMException: 事务管理器已禁用对远程/网络事务的支持。
同样,我很确定在该范围内只打开了一个连接。看一看。
protected override void DataPortal_Update()
{
using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, System.Transactions.TransactionManager.MaximumTimeout))
{
//get the dal manager he knows which dal implementation to use
using (var dalMgr = DataAccess.BusinessObjectsDalFactory.GetManager())
{
//get the category dal implementation
var ecDal = dalMgr.GetProvider<DataAccess.BusinessObjectDalInterfaces.ICategoryDAL>();
//assume all the data is good at this point so use bypassproperty checks
using (BypassPropertyChecks)
{
var catData = new Models.Category { CategoryId = CategoryId, CategoryName = CategoryName, LastChanged = TimeStamp };
ecDal.UpdateCategory(catData);
TimeStamp = catData.LastChanged;
}
}
ts.Complete();
}
base.DataPortal_Update();
}
public class DalManager : Core.Sebring.DataAccess.IBusinessObjectsDalManager {private static string _typeMask = typeof(DalManager).FullName.Replace("DalManager", @"{0}");
public T GetProvider<T>() where T : class
{
var typeName = string.Format(_typeMask, typeof(T).Name.Substring(1));
var type = Type.GetType(typeName);
if (type != null)
return Activator.CreateInstance(type) as T;
else
throw new NotImplementedException(typeName);
}
public Csla.Data.DbContextManager<DataContext> ConnectionManager { get; private set; }
public DalManager()
{
ConnectionManager = Csla.Data.DbContextManager<DataContext>.GetManager();
}
public void Dispose()
{
ConnectionManager.Dispose();
ConnectionManager = null;
}
public void UpdateDataBase()
{
DatabaseUpgrader.PerformUpgrade();
}
}
public void UpdateCategory(Models.Category catData)
{
if (catData == null) return;
using (var cntx = DbContextManager<DataContext>.GetManager())
{
var cat = cntx.DbContext.Set<Category>().FirstOrDefault(c => c.CategoryId == catData.CategoryId);
if (cat == null) return;
if (!cat.LastChanged.Matches(catData.LastChanged))
throw new ConcurrencyException(cat.GetType().ToString());
cat.CategoryName = catData.CategoryName;
//cntx.DbContext.ChangeTracker.DetectChanges();
cntx.DbContext.Entry<Category>(cat).State = System.Data.EntityState.Modified;
cntx.DbContext.SaveChanges();
catData.LastChanged = cat.LastChanged;
}
}
DBContextManager 的代码是可用的,但简而言之,它只是确保只有一个 DBContext,因此打开一个连接。我忽略了什么吗?我猜可能是 DBConextManager 出了问题,所以我也在 CSLA 论坛上发帖(DBContextManager 是 CSLA 的一部分)。但是有没有人遇到过确定在事务范围内打开一个连接并将事务升级到 DTC 的情况?
当然,我无法在我的本地开发机器或我们的任何 QA 机器上重现异常。
感谢任何帮助。
谢谢。
最佳答案
在使用 System.Transactions.TransactionScope
进行交易时, Entity Framework 可以随机尝试打开一个新连接
尝试添加一个 finally 语句并处理您的事务,同时调用您的 dbContext 并手动关闭连接,这将减少事务升级的次数,但它仍然可能发生:
finally
{
cntx.Database.Connection.Close();
transaction.Dispose();
}
这是一个已知的“错误”,您可以在此处找到更多信息:
http://petermeinl.wordpress.com/2011/03/13/avoiding-unwanted-escalation-to-distributed-transactions/
关于c# - 交易升级为 DTC 无多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278994/
我正在尝试从源代码编译 qemu,我正在尝试安装 qemu for hisilicon ,但是当我运行 ./configure 时,我收到错误 ERROR: DTC (libfdt) version
我有一个使用 Entity Framework 的 Web 应用程序 - 我们使用 TransactionScope 类来提供环境事务。 有什么方法可以告诉 EF 优先使用标准 T-SQL 事务而不是
有什么方法可以准确确定 System.Transaction TrasactionScope 升级到 DTC 的原因?我们的一个组件似乎会升级事务,而所有其他组件(看似看似相似)却没有升级,我们遇到了
我正在使用 NServiceBus 中的分发器,但我遇到了关于 DTC 的忽视。我以前在跨进程做事情时只使用过一次或者两次 DTC,而且次数不多,所以我对整个 DTC 概念还是个新手。 Questio
我正在尝试建立一个环境,在该环境中,源自 Web 服务器 (asp.net) 的 TransactionScope 将通过 WCF 将事务传输到应用程序服务器,然后再传输到数据库。由于我被迫使用 SQ
我的机器上禁用了 DTC。据我了解,这段代码应该会失败,因为它在同一个事务中使用了两个数据上下文。那么,它为什么有效? (注意:我使用 .NET 3.5 和 .NET 4.0 进行了尝试。) usin
我正在考虑将我们的 NServiceBus 3.3.3 系统升级到版本 4。 我读了一些帖子,似乎表明版本 4 可以在没有 DTC 的情况下工作。这是真的吗? 基本上,这就是我正在考虑做的事情: 更改
有没有人知道在使用事务范围时在多个连接未打开时事务升级到 DTC 的情况。 我知道如果我在一个事务范围内打开多个连接(无论是什么连接字符串),该事务很可能会被提升到 DTC。 知道这一点后,我竭尽全力
我们的组织在大型机 Adabas 数据库中拥有大量重要数据。我们可以通过 ODBC 访问这些数据,并且从 C# 使用 ODBC/Natural“存储过程”成功地查询/更新了它。 我们现在希望能够从 S
我编写了一个程序来演示多线程 DTC 超时的行为。我有几个异常(exception),似乎是随机的。所有这些都是简单的超时,还是其中一些指示更深层次的问题(连接池交互等)? The Microsoft
我已将遇到的问题简化为以下示例代码: var inQueue = ".\private$\testqueue"; using (var ts = new TransactionScope()) {
我们的软件包随机失败并显示以下错误消息: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x8
我是 AUTOSAR 的新手,我试图了解如何记录 DTC,但我对老化和去抖动计数器感到困惑。请帮助我了解 DTC 是如何记录的? 最佳答案 Dem 模块提供了两项(除其他外)重要服务来记录 DTC 的
我正在使用 MSMQ 端点。我在我的服务上设置了以下属性。 [OperationBehavior(TransactionScopeRequired = true, TransactionAutoCom
我正在建立 Sierra Charts 和我的 Java 程序之间的集成,为此我正在使用他们的 DTC 协议(protocol)/框架,这使我能够(从我的 Java 程序)创建一个套接字连接,然后来回
据我所知,为了在.NET 中使用 TransactionScope,您需要运行 Windows 中的分布式事务协调器服务。我已关闭该服务,并且我的应用程序似乎运行相同并且回滚事务没有问题。 我错过了什
我想知道为什么 WCF 需要在客户端和服务器上配置和启动 MSDTC,当我使用事务流时。 (启用网络访问) 毕竟,WCF 中的事务是通过使用 WsAtomicTransaction 的 SOAP 消息
我正在开发一个 iOS 应用程序,它可以让我存储汽车信息。我正在使用 OBD-2 蓝牙设备与我的应用进行交互。 在某些情况下,我需要存储 DTC 或诊断故障代码的值。一些博客建议只在车辆点火时获取 D
是否有不需要启用 DTC 的 transactionScope 的替代方案?? 在事务中我需要做两个操作: 创建一个用户(使用成员资格 - sql 成员资格提供程序) 做一个插入操作。 最佳答案 Tr
我刚刚开始使用 TransactionScope,我发现总会遇到一些意想不到的事情,需要永远调试。 我认为拥有这些的综合列表对于那些“奇怪的错误”情况非常有用,并且可以扩展我们对平台中奇怪现象的了解。
我是一名优秀的程序员,十分优秀!