TransactionScope Troubleshooting[通俗易懂]

TransactionScope Troubleshooting[通俗易懂]只要涉及到数据库的操作,那么使用事务就是难免的。如果我们使用LINQtoSQL作为数据访问层,那么LINQ提供的SubmitChanges()方法自身就包含了对事务的处理。当然,我们也可以利用System.Data.Common.DbTransaction对事务进行处理,我们可以调用DataContext中Connection的方法BeginTransaction()启动事务,然后根据情况进行

大家好,又见面了,我是你们的朋友全栈君。

只要涉及到数据库的操作,那么使用事务就是难免的。如果我们使用LINQ to SQL作为数据访问层,那么LINQ提供的SubmitChanges()方法自身就包含了对事务的处理。当然,我们也可以利用System.Data.Common.DbTransaction对事务进行处理,我们可以调用DataContext中Connection的方法BeginTransaction()启动事务,然后根据情况进行回滚或提交。例如是这样一段代码:

 

 

然而,当我们在使用LINQ to SQL中时,往往会同时使用多个DataContext,此时我们就需要使用TransactionScope。例如:
 

代码中,分别涉及到Update, Delete等操作,因此我们势必需要用事务,保证数据整体提交或整体回滚。在使用事务的时候,有一些前置条件是必备的。例如启动Distributed Transaction Coordinator服务,否则,就会抛出System.Data.SqlClient.SqlException异常,信息为:”MSDTC on server ‘{Server Name}’ is unavailable.”。是的,很多资料都是这样描述的。然而,现实并没有这么简单。我们首先得考虑运行代码的机器是否与数据库所在的机器是同一台。这里所谓的启动Distributed Transaction Coordinator服务,实际上是要启动数据库服务器的服务。如果数据库与代码服务器是同一台,通过这样的设置就没有错误了。

当数据库与代码服务器分属两台机器呢?同样运行如上的代码,就会抛出System.Transactions.TransactionManagerCommunicationException异常。异常信息为:”Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool.”

这是一种通信错误,原因在于两台服务器之间的安全配置禁止了分布式事务。解决办法是在运行代码的服务器上,配置Component Services。方法如下:
1、在Run运行窗口中,输入dcomcnfg命令,这样就可以打开Component Services。
2、选择Component Services->Computers->My Computer;
3、右键单击My Computer,在弹出的快捷菜单中,选择“Properties”,然后点击MSDTC tab;
4、在MSDTC tab中,点击Security Configuration按钮;
5、在弹出的对话框中参照下表的建议进行设置:

Configuration Option Default Value Recommended Value

Network DTC Access

Disabled

Enabled

Client and Administration

 

 

Allow Remote Clients

Disabled

Disabled

Allow Remote Administration

Disabled

Disabled

Transaction Manager Communication

 

 

Allow Inbound

Disabled

Enabled

Allow Outbound

Disabled

Enabled

Mutual Authentication Required

Enabled

Enabled if all remote machines are running Win2K3 SP1 or XP SP2 or higher, and are configured with “Mutual Authentication Required”.

Incoming Caller Authentication Required

Disabled

Enabled if running MSDTC on cluster.

No Authentication Required

Disabled

Enabled if remote machines are pre-Windows Server 2003 SP1 or pre- Windows XP SP2.

Enable TIP

Disabled

Enabled if running the BAM Portal.

Enable XA Transactions

Disabled

Enabled if communicating with an XA based transactional system such as when communicating with IBM WebSphere MQ using the MQSeries adapter.

最后的设置如截图:
TransactionScope Troubleshooting[通俗易懂]

如果操作系统是Windows 2003,通常默认的设置就是正确的。不过我们在编写程序时,不管是Unit Test,还是其他测试,最频繁的还是在本机上运行。如果操作系统是Windows XP,就不得不进行这样的设置了。

 注: 此贴中没写在防火墙中加入msdtc.exe,值得商榷

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161957.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea2021.7 30天激活码【中文破解版】

    (idea2021.7 30天激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlb…

    2022年3月21日
  • 文件夹打不开如何修复_为知笔记使用教程

    文件夹打不开如何修复_为知笔记使用教程呃….虽然是展示了笔记,但最为苦恼的一个问题,黏贴代码时,它竟然连序号都会粘上….最近再看谷粒学苑的笔记时,发现是ziw后缀的笔记,于是在网上下载了。呃~~下载好了打开文件一看,还是一如既往的会黏贴代码序号~,下载之后发现根本打不开文件,于是再次问度娘~~~通过发送的方式,将笔记发送到为知笔记软件里去。通过这个大神网友的评论才突然发现,原来是。的版本bug,下载旧版本就OK了。然后又再次找解决方法~~~的选项,找到以下目录,并把。…

    2022年10月12日
  • android 悬浮窗实现(Android可拖动悬浮窗实现)

    *本篇文章已授权微信公众号guolin_blog(郭霖)独家发布现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以及探索一下实现悬浮窗时的易错点。

    2022年4月17日
  • arm-linux 开发步骤

    arm-linux 开发步骤ARM-Linux开发步骤拿到一块YC2440(s3c2440)的开发板,经过几天的学习,我对arm-linux系统开发步骤有了一些认识。就以开发这个开发板为例,arm-linux开发工作大概分4个部分1.       硬件(hardware)2.       引导加载器(bootloader)3.       内核(kernel)4.       文件系统(file

    2022年6月7日
  • 爬虫

    爬虫

    2021年6月13日
  • Vue(14)slot插槽的使用「建议收藏」

    Vue(14)slot插槽的使用「建议收藏」为什么使用slotslot(插槽)在生活中很多地方都有插槽,电脑usb的插槽,插板当中的电源插槽插槽的目的是为了让我们原来的设备具备更多的扩展性比如电脑的USB我们可以插入U盘,手机,鼠标,键

    2022年7月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号