TransactionScope处理分布式事务提示:事务已被隐式或显式提交,或已终止

ytmchong 2009-02-19 03:33:49
用.net2.0的TransactionScope处理分布式事务提示:事务已被隐式或显式提交,或已终止。
中间层服务端和数据库服务器分别在不同的机械上,数据库服务器装有ISA2004防火墙,之前都是可以的,
最近不知什么原因就不行了,并用以下方法设置了,也不行,搞了几天了.
对MSDTC组件设置:
步骤:
1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
2. 选择MSDTC页, 确认"使用本地协调器"
3.点击下方"安全配置"按钮
4. 勾选: "允许网络访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".
5. 对于数据库服务器端, 可选择"要求对呼叫方验证"
停止分布式事务协调器服务,然后重新予以启动。
停止参与分布式事务的任何资源管理器服务(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然后重新予以启动。
6.在双方防火墙中增加MSDTC.exe例外
可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
7.dtC用到remoting的135端口,确保防火墙没有阻止

2.在数据库服务器(MS SQL)上的 hosts 文件中加入 Web 服务器(IIS) 的 IP 和 主机名 映射对
1.
定位到 C:\WINDOWS\system32\drivers\etc 目录
2.
记事本打开 hosts 文件(没有扩展名)
3.
添加一行 Web 服务器 IP 和 主机名映射, 如
10.10.1.118 MyWebServerHostName
192.168.1.25 jack
...全文
1563 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
蟲蟲2014 2011-05-30
  • 打赏
  • 举报
回复
不行啊,,,,,,,,,,,高手们
LeoPink 2010-04-16
  • 打赏
  • 举报
回复
sgsdfgsgfsgdf
DalyQiao 2009-12-18
  • 打赏
  • 举报
回复
我也碰到这个问题了,如上处理之后还是不行,最后发现处于虚拟机中的数据库服务的强制分布式事务没打勾通,打勾后就好了。
ytmchong 2009-12-07
  • 打赏
  • 举报
回复
TransactionScope处理分布式事务还是有问题,换其它方式处理了.
mjjzg 2009-03-07
  • 打赏
  • 举报
回复
还是要学习一下了,UP
wangping_li 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ytmchong 的回复:]
我把数据库服务器上的ISA2004卸载掉,换到其它服务器,现在又提示另一个类似的信息:"该伙伴事务管理器已经禁止了他对远程/网络事务的支持"
[/Quote]

当IIS应用服务器与SQL Server数据服务器在不同机器上时, Transaction发生异常.
该伙伴事物管理器已经禁止了他对远程/网络事务的支持.
事务已被隐式或显式提交,或已终止.
1.对MSDTC组件设置:
步骤:
1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性
2. 选择MSDTC页, 确认"使用本地协调器"
3.点击下方"安全配置"按钮
4. 勾选: "允许网络访问","允许远程客户端","允许入站","允许出站","不要求进行身份验证".
5. 对于数据库服务器端, 可选择"要求对呼叫方验证"
停止分布式事务协调器服务,然后重新予以启动。
停止参与分布式事务的任何资源管理器服务(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然后重新予以启动。
6.在双方防火墙中增加MSDTC.exe例外
可用命令行: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable
7.dtC用到remoting的135端口,确保防火墙没有阻止

2.在数据库服务器(MS SQL)上的 hosts 文件中加入 Web 服务器(IIS) 的 IP 和 主机名 映射对
1.
定位到 C:\WINDOWS\system32\drivers\etc 目录
2.
记事本打开 hosts 文件(没有扩展名)
3.
添加一行 Web 服务器 IP 和 主机名映射, 如
10.10.1.118 MyWebServerHostName
192.168.1.25 jack
wangping_li 2009-03-07
  • 打赏
  • 举报
回复
不管你是Remoting还是WebService,如果你一个操作里面调用两次这个方法是不行的,如:

void add()
{
事务开始
//...操作
事务结束
}

客户端一个操作里面:
事务开始
//add方法
事务结束

这是你客户端的事务是没法与服务端的列表加为同一个环境事务的,所以事务必须在服务端发起的,客户端不能有这些东西
写在存储过程也可以的
ytmchong 2009-03-07
  • 打赏
  • 举报
回复
我把数据库服务器上的ISA2004卸载掉,换到其它服务器,现在又提示另一个类似的信息:"该伙伴事务管理器已经禁止了他对远程/网络事务的支持"
zzxap 2009-03-07
  • 打赏
  • 举报
回复
分布式错误,DTC出错问题

错误提示:事务已被隐式或显式提交,或已终止,已禁用对分布式事务管理器(MSDTC)的网络访问

一.A.不用事务,单用SELECT 语句.是否可以分布式查询?

B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)

C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.

D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe

二.两台机的MSDTC是否都打开了.

三.MSDTC设置是否正确.

1.打开命令提示,运行 "net stop msdtc ",然后运行 "net start msdtc "。
2.转至 "组件服务管理工具 "。
3.浏览至 "启动管理工具 "。
4.选择 "组件服务 "。
a.展开 "组件服务 "树,然后展开 "我的电脑 "。
b.右键单击 "我的电脑 ",然后选择 "属性 "。
C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
XA 事务
e.另外, "DTC 登录帐户 "一定要设置为 "NT Authority\NetworkService "。
5.单击 "确定 "。这样将会提示您 "MS DTC 将会停止并重新启动。
所有的依赖服务将被停止。请按 '是 '继续 "。单击 "是 "继续。
6.单击 "确定 "关闭 "我的电脑 "属性窗口。

四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.

五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为 "MSDASQL " 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have

implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.

七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.

八.如果是WIN2000,升级到SP4

九.升级MDAC到2.6以上,最好是2.8.

十.要安装SQL的最新补丁: sp3a
ytmchong 2009-03-07
  • 打赏
  • 举报
回复
to:wangping_li
我用的是Remoting,没用WebService,所有数据操作都是放在一个DLL项目里。
我现在暂时把所有事务都注释掉,尽量把事务放在存储过程里处理,系统可以正常运行,但问题总要解决。
ytmchong 2009-03-07
  • 打赏
  • 举报
回复
都试过了,还是不行,如果问题解决不了,只好用最后一招恢复Ghost备份.
wangping_li 2009-03-04
  • 打赏
  • 举报
回复
你的的系统是带WebService的还是本地的?
如果带 WS的话事务必须写在服务端,如果你服务端也写本地也写的话是没用的,本地和服务端的事务不能加到一个列表里在
你在你的事务里面加上: using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))这样就不会报错了,但是并不能解决问题
你的问题很可能就是远程事务和自己本地的根本不是一个环境的.
ytmchong 2009-02-25
  • 打赏
  • 举报
回复
我用Dctping.exe 在中间层服务端和数据库服务器双向都ping过,显示以下错误码信息:
Problem:fail to invoke remote RPC method
Error(0x6BF) at dtcping.cpp @303
-->RPC pinging exception
-->1727(远程过程调用失败且未运行。)
RPC test failed
wangping_li 2009-02-20
  • 打赏
  • 举报
回复
MSDTC安全配置里面全改为
允许远程客户端、允许远程管理、允许入、出站
不要求进行难、启用事务Internet协议(TIP)事务
启用XA事务

我就这样配置的,没问题
ls3697264 2009-02-20
  • 打赏
  • 举报
回复
UP
冷月孤峰 2009-02-19
  • 打赏
  • 举报
回复
UP一个
king19840811 2009-02-19
  • 打赏
  • 举报
回复
up
sunshine_anycall 2009-02-19
  • 打赏
  • 举报
回复
没做过
up

110,531

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧