我在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)。
在网上查到一些资料:
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、
在WPF开发中遇到WCF访问数据库报错:基础提供程序在OPEN上失败。解决方案包括在组件服务中启用MSDTC的网络DTC访问,以及检查服务帐户是否为NT AUTHORITY\NetworkService。当错误持续出现时,可能需要重新设置服务帐户、重置MSDTC日志并重启相关服务。
2874

被折叠的 条评论
为什么被折叠?



