积极答复者
TransactionScope事务问题

问题
-
我在项目里面用TransactionScope这个事务,以前都是好好的,但是最近放在一个功能里面就会报错
---------------------------------------------错误信息----------------------------------------------------------
该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 (Exception from HRESULT: 0x8004D025)
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.Runtime.InteropServices.COMException: 该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 (Exception from HRESULT: 0x8004D025)
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
请高手指点,因为数据量还是蛮大的,不用事务的话我怕万一在什么地方挂掉查起数据来就郁闷了。谢谢了。
答案
-
您好,几个思路请参考:
1、检查一下Sql连接字符串,改为sql混合验证,用sql的用户来验证试试
2、在没有事务的情况下看能否访问成功
3、不知是否用wcf,如果是则可以配置事务协议,将OleTx协议配成WSAT协议。
如果没用wcf,请确认数据库服务器防火墙关闭,因为默认情况下事务从KTM提升时将采用OleTx协议,该协议不能穿越防火墙。
4、确认DTC的配置情况:
配置 Microsoft 分布式事务处理协调器 (MSDTC) 以支持运行示例
-
在服务计算机上,配置 MSDTC 以允许传入网络事务。
- 从“开始”菜单中,依次定位到“控制面板”、“管理工具”和“组件服务”。
- 打开“计算机”文件夹。
- 右击“我的电脑”,并选择“属性”。
- 在“MSDTC”选项卡上,单击“安全配置”。
- 选中“网络 DTC 访问”和“允许入站”。
- 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
- 单击“确定”关闭对话框。
-
在服务计算机和客户端计算机上,配置 Windows 防火墙以便在例外应用程序列表中包括 Microsoft 分布式事务处理协调器 (MSDTC):
- 从“控制面板”上运行 Windows 防火墙应用程序。
- 从“例外”选项卡上,单击“添加程序”。
- 浏览到文件夹 C:\WINDOWS\System32。
- 选择 Msdtc.exe 并单击“打开”。
- 单击“确定”关闭“添加程序”对话框,然后再次单击“确定”关闭 Windows 防火墙小程序。
-
在客户端计算机上,配置 MSDTC 以允许传出网络事务:
- 从“开始”菜单中,依次定位到Control Panel、“管理工具”和“组件服务”。
- 右击“我的电脑”,并选择“属性”。
- 在“MSDTC”选项卡上,单击“安全配置”。
- 选中“网络 DTC 访问”和“允许出站”。
- 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
- 单击“确定”关闭对话框。
- 已建议为答案 韦恩卑鄙 waywa 2009年9月1日 6:21
- 已标记为答案 Allen Chen - MSFTModerator 2009年9月2日 9:37
-
全部回复
-
scope 本身在一条连接的时候不会开启msdtc 所以就算你的书据库服务器在远程不受信任也没关系
一旦你在scope 里面使用了两条数据连接 那么scope就会自动开启 dtc 支持 这个时候要求你的数据库服务器在本地 或者是可信任的服务器上
简单的解决办法是确认你最近的修改是否用了多个连接 否则在确保msdtc服务开启的状况下 把数据库服务器和访问者彼此设置为信任服务器
恭喜自己5星用户达成- 已建议为答案 韦恩卑鄙 waywa 2009年9月1日 6:21
-
您好,几个思路请参考:
1、检查一下Sql连接字符串,改为sql混合验证,用sql的用户来验证试试
2、在没有事务的情况下看能否访问成功
3、不知是否用wcf,如果是则可以配置事务协议,将OleTx协议配成WSAT协议。
如果没用wcf,请确认数据库服务器防火墙关闭,因为默认情况下事务从KTM提升时将采用OleTx协议,该协议不能穿越防火墙。
4、确认DTC的配置情况:
配置 Microsoft 分布式事务处理协调器 (MSDTC) 以支持运行示例
-
在服务计算机上,配置 MSDTC 以允许传入网络事务。
- 从“开始”菜单中,依次定位到“控制面板”、“管理工具”和“组件服务”。
- 打开“计算机”文件夹。
- 右击“我的电脑”,并选择“属性”。
- 在“MSDTC”选项卡上,单击“安全配置”。
- 选中“网络 DTC 访问”和“允许入站”。
- 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
- 单击“确定”关闭对话框。
-
在服务计算机和客户端计算机上,配置 Windows 防火墙以便在例外应用程序列表中包括 Microsoft 分布式事务处理协调器 (MSDTC):
- 从“控制面板”上运行 Windows 防火墙应用程序。
- 从“例外”选项卡上,单击“添加程序”。
- 浏览到文件夹 C:\WINDOWS\System32。
- 选择 Msdtc.exe 并单击“打开”。
- 单击“确定”关闭“添加程序”对话框,然后再次单击“确定”关闭 Windows 防火墙小程序。
-
在客户端计算机上,配置 MSDTC 以允许传出网络事务:
- 从“开始”菜单中,依次定位到Control Panel、“管理工具”和“组件服务”。
- 右击“我的电脑”,并选择“属性”。
- 在“MSDTC”选项卡上,单击“安全配置”。
- 选中“网络 DTC 访问”和“允许出站”。
- 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
- 单击“确定”关闭对话框。
- 已建议为答案 韦恩卑鄙 waywa 2009年9月1日 6:21
- 已标记为答案 Allen Chen - MSFTModerator 2009年9月2日 9:37
-