none
TransactionScope事务问题 RRS feed

  • 问题

  • 我在项目里面用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. 

    请高手指点,因为数据量还是蛮大的,不用事务的话我怕万一在什么地方挂掉查起数据来就郁闷了。谢谢了。

    2009年8月27日 2:49

答案

  • 您好,几个思路请参考:
    1、检查一下Sql连接字符串,改为sql混合验证,用sql的用户来验证试试
    2、在没有事务的情况下看能否访问成功
    3、不知是否用wcf,如果是则可以配置事务协议,将OleTx协议配成WSAT协议。
         如果没用wcf,请确认数据库服务器防火墙关闭,因为默认情况下事务从KTM提升时将采用OleTx协议,该协议不能穿越防火墙。
    4、确认DTC的配置情况:
       

    配置 Microsoft 分布式事务处理协调器 (MSDTC) 以支持运行示例

    1. 在服务计算机上,配置 MSDTC 以允许传入网络事务。

      1. “开始”菜单中,依次定位到“控制面板”“管理工具”“组件服务”
      2. 打开“计算机”文件夹。
      3. 右击“我的电脑”,并选择“属性”
      4. “MSDTC”选项卡上,单击“安全配置”
      5. 选中“网络 DTC 访问”“允许入站”
      6. 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
      7. 单击“确定”关闭对话框。
    2. 在服务计算机和客户端计算机上,配置 Windows 防火墙以便在例外应用程序列表中包括 Microsoft 分布式事务处理协调器 (MSDTC):

      1. 从“控制面板”上运行 Windows 防火墙应用程序。
      2. “例外”选项卡上,单击“添加程序”
      3. 浏览到文件夹 C:\WINDOWS\System32。
      4. 选择 Msdtc.exe 并单击“打开”
      5. 单击“确定”关闭“添加程序”对话框,然后再次单击“确定”关闭 Windows 防火墙小程序。
    3. 在客户端计算机上,配置 MSDTC 以允许传出网络事务:

      1. “开始”菜单中,依次定位到Control Panel“管理工具”“组件服务”
      2. 右击“我的电脑”,并选择“属性”
      3. “MSDTC”选项卡上,单击“安全配置”
      4. 选中“网络 DTC 访问”“允许出站”
      5. 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
      6. 单击“确定”关闭对话框。
    2009年8月27日 13:05

全部回复

  • 楼主你好,曾经遇到过类似的问题,解决方法如下:

    MSDTC 删除重新安装配置一次试试
    msdtc -uninstall
    msdtc -install

    知识改变命运,奋斗成就人生!
    2009年8月27日 3:11
    版主
  • scope 本身在一条连接的时候不会开启msdtc  所以就算你的书据库服务器在远程不受信任也没关系

    一旦你在scope 里面使用了两条数据连接 那么scope就会自动开启 dtc 支持  这个时候要求你的数据库服务器在本地  或者是可信任的服务器上

    简单的解决办法是确认你最近的修改是否用了多个连接  否则在确保msdtc服务开启的状况下  把数据库服务器和访问者彼此设置为信任服务器


    恭喜自己5星用户达成
    2009年8月27日 4:06
  • 我在程序里面的确是切换了访问数据库的链接,是不是因为这个原因啊?
    把数据库服务器和访问者彼此设置为信任服务器,这个怎么设置啊,能否具体点。
    服务器是windows 2002 64位,数据库是SQL2005
    谢谢。
    2009年8月27日 6:26
  • 您好,几个思路请参考:
    1、检查一下Sql连接字符串,改为sql混合验证,用sql的用户来验证试试
    2、在没有事务的情况下看能否访问成功
    3、不知是否用wcf,如果是则可以配置事务协议,将OleTx协议配成WSAT协议。
         如果没用wcf,请确认数据库服务器防火墙关闭,因为默认情况下事务从KTM提升时将采用OleTx协议,该协议不能穿越防火墙。
    4、确认DTC的配置情况:
       

    配置 Microsoft 分布式事务处理协调器 (MSDTC) 以支持运行示例

    1. 在服务计算机上,配置 MSDTC 以允许传入网络事务。

      1. “开始”菜单中,依次定位到“控制面板”“管理工具”“组件服务”
      2. 打开“计算机”文件夹。
      3. 右击“我的电脑”,并选择“属性”
      4. “MSDTC”选项卡上,单击“安全配置”
      5. 选中“网络 DTC 访问”“允许入站”
      6. 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
      7. 单击“确定”关闭对话框。
    2. 在服务计算机和客户端计算机上,配置 Windows 防火墙以便在例外应用程序列表中包括 Microsoft 分布式事务处理协调器 (MSDTC):

      1. 从“控制面板”上运行 Windows 防火墙应用程序。
      2. “例外”选项卡上,单击“添加程序”
      3. 浏览到文件夹 C:\WINDOWS\System32。
      4. 选择 Msdtc.exe 并单击“打开”
      5. 单击“确定”关闭“添加程序”对话框,然后再次单击“确定”关闭 Windows 防火墙小程序。
    3. 在客户端计算机上,配置 MSDTC 以允许传出网络事务:

      1. “开始”菜单中,依次定位到Control Panel“管理工具”“组件服务”
      2. 右击“我的电脑”,并选择“属性”
      3. “MSDTC”选项卡上,单击“安全配置”
      4. 选中“网络 DTC 访问”“允许出站”
      5. 单击“确定”,然后单击“是”以重新启动 MSDTC 服务。
      6. 单击“确定”关闭对话框。
    2009年8月27日 13:05