WCF MSDTC 基础提供程序在OPEN上失败解决方法

来源:互联网 发布:淘宝网三星平板电脑 编辑:程序博客网 时间:2024/05/21 10:06

我在WPF开发过程中,通过WCF访问数据库时出现这个问题:基础提供程序在OPEN上失败,网上说是连错数据库,但我的解决不了,我的解决方法是在控制面板--管理工具--组件服务--我的电脑--Distributed Transaction Coordinator--本地DTC,右键属性,安全里面把网络DTC访问勾上,事务管理器通信中的允许入站,允许出站勾上。同事说是系统没有让程序处理事务的问题。

2012-12-16遇到了新的问题,无故出现了这错误,而且是在这种情况下出错:

 

using(var ts=new System.Transactions.TransactionScope())
         {
                ————多表操作代码                   
                ts.Complete();
          }
直接报错!错误是 基础提供程序在open上失败

能执行完一个表操作,第二个表操作就错了。查了很多资料试验都没有起到作用。

后来研究了一下系统日志,在应用程序日志里发现有关MSDTC的一些错误显示。

 

1、正在运行 MS DTC 服务的帐户无效。如果使用 Microsoft Management Console (MMC) 中的“服务”管理单元更改了服务帐户信息,就会发生这种情况。MS DTC 服务将继续启动。请确认使用“组件服务管理器”更新了 MS DTC 服务帐户信息

2、尝试与系统 GWDEV01 建立安全连接时,MSDTC 遇到错误(HR=0x80000171)。

 

在网上查到一些资料:

 

“正在运行 MS DTC 服务的帐户无效”错误

MSDTC( Distributed Transaction Coordinator )服务必须在 NT AUTHORITY\NetworkService 帐户下运行;即使是 NT AUTHORITY\Network Service(注意,Network和Service中间有空格)也不行(至于这两个帐户的区别,在网上也没有找到,还望大家不吝赐教 :))。如果登录帐户被更改,MSDTC服务会继续运行,但是在执行的时候可能会出错。而且,在事件日志的“应用程序”里面可以发现如下的出错信息:

正在运行 MS DTC 服务的帐户无效。 如果使用 Microsoft Management Console (MMC) 中的“服务”管理单元更改了服务帐户信息,就会发生这种情况。 MS DTC 服务将继续启动。请确认使用“组件服务管理器”更新了 MS DTC 服务帐户信息。

要更改成正确的登录帐户,我们可以:

  • 服务中找到Distributed Transaction Coordinator服务,选择“属性”;
    在“登录”选项卡中,选择“此帐户”,帐户名填写“NT AUTHORITY\NetworkService”,密码为空;
    在点击“确定”后重新启动服务。
  • 或者,
    在命令行下运行 msdtc -uninstall ,卸载 msdtc 服务;
    再运行 msdtc -install ,安装 msdtc 服务。

 

然后我的做法是,

1、重新设置了帐户,在服务中找到Distributed Transaction Coordinator服务,选择“属性”;
在“登录”选项卡中,选择“此帐户”,帐户名填写“NT AUTHORITY\NetworkService”,密码为空;

2、关闭MSDTC服务:net stop msdtc

3、重置MSDTC日志:MSDTC -resetlog

4、开起MSDTC服务:net start msdtc

5、重启IIS:iisreset

问题解决。。。

3、