Web事务管理-基础事务管理器的通信失败

1. 适用范围

DotNet开发过程中,涉及多个数据库和不同数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通信失败”的错误。导致这个错误一般有下列三个原因:

1) MSDTC设置不正确;

2) 是否被防火墙阻挡;

3) 跨网段通讯或跨域通讯;

在数据库项目开发时,连接一个远程数据库(如SQLServer2005时)时,创建多个数据库连接时,SQLServer2005会自动由LTM(Light Weight TransactionManager)升级成OLETX(MSDTC)来处理,开启MSDTC服务,通过RPC远程数据库。

2. 原理概述

排除此问题可通过以下几步来解决:

1.     双方启动MSDTC服务

MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器。

位置:控制面板--管理工具--服务--Distributed Transaction Coordinator

依存关系:Remote Procedure Call(RPC)和Security Accounts Manager

建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。

解决办法:

(1)在windows控制面版-->管理工具-->服务-->Distributed TransactionCoordinator-->属性-->启动

(2)在CMD下运行"netstart msdtc"开启服务后正常。

注:如果在第1步Distributed Transaction Coordinator无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:

(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。

(2) 输入:msdtc-resetlog (注意运行此命令时,不要执行挂起的事务)

(3) 最后输入:net startmsdtc 回车,搞定!

2.     打开“控制面板(Control Panel)―管理工具(AdministrativeTools)―组件服务(Component Service)”(或者开始-运行 “Dcomcnfg.exe”)
3.     打开“组件服务(Component Service)―计算机(Computers)”
4.     在“我的电脑(My Computer)”上点击右键,点击“属性(Properties)”:

(1)选中“网络DTC访问”

(2)在客户端管理中选中“允许远程客户端”“允许远程管理”

(3)在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”

(4)保证DTC登陆账户为:NTAuthority\NetworkService 

(5)单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。 所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。

5.     关闭网络防火墙(或者开放相应的端口135或用services.msc打开服务启动TCP/IP NetBIOS Helper服务)

XP系统配置如下图:


Window2008系统配置如下图:


注:在Windows2003+sp1或WinXP+SP2的机器环境时,若客户端和数据库端的操作系统一样(即都为Win2003+sp1或WinXP+SP2),则可以要求双方进行验。若客户端和服务端有一方不相同(如为win2000)时,需设置为不要求进行验证;因此安全配置建议设置为不要求进行验证,如上图所示。

2.2     防火墙设置

若还是不成功,可以看一下是否开启网卡上的防火墙,可把MSDTC加入例外,如下图所示:(关于MSDTC与防火墙的问题可参考:http://support.microsoft.com/kb/306843/zh-GB

2.3 设置防火墙第一步

2.4 Windows2008 设置防火墙第二步

2.3     其他特殊情况处理

最近在虚拟机上进行服务器迁移,发现以上配置完全不能生效。如果出现这种情况,可能原因有下面几点:

2.3.1  同一个镜像制作的制作的系统

重新安装msdtc服务。下面是来自网上的重装步骤。

1、删除注册表中的如下三个键

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC 

HKEY_CLASSES_ROOT\CID

2、 停止MSDTC服务:net stop msdtc

3、 卸载MSDTC服务:msdtc–uninstall

4、 重新安装MSDTC服务:msdtc -install 

5、 确认在事件查看器中msdtc服务已经正常启动

6、 重启机器

7、 在命令行窗口执行

msdtc –resetlog

重装完毕。

注:在此过程中,我们只进行了msdtc –uninstall跟msdtc –install操作,检查msdtc配置之后,重启IIS,成功。

2.3.2  其他待补充

其他情况,请您查看系统日志文件,根据里面的具体错误情况,进行针对性处理。

2.4     MSDTC的通信检测

至于MSDTC的通信检测,用户可以通过DTCPing(或DTCTester)工具进行测试。DTCPing 需服务端和客户端成对进行测试,一方启动为服务端,而另一方启动为客户端,进行DTC通信测试。下图是DTCPing测试的示例:

如上图所示,DB服务器和客户端RPC是相互连通可以通信的。

注意:Remote Server Name为NetBios名称。

 工具可以从微软网站上下载:

DTCPing可以从微软站点下载:

http://www.microsoft.com/downloads/details.aspx?FamilyID=5e325025-4dcd-4658-a549-1d549ac17644&DisplayLang=en

DTCPing说明:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q306843

DTCTester可以从微软站点下载:

http://support.microsoft.com/?scid=kb%3Ben-us%3B293799

2.5     其他可能原因

在若还不行,看一下数据库服务器与客户端(如web端)是不是在同一网段(或者同一个AD域),检测步骤可参考如下:

a) telnet DbIP 135是否可以通;

b) 然后相互Ping IP;

c) 再ping 相互的NetBios名称,还不通的话

d) 可以修改%windir%/system32/etc/hosts,或%windir%/system32/etc/lmhost.sam去掉文件扩展名,进行DB服务和IP的绑定即可,如下图所示:

 在不同的AD域中,若IP可以ping通,但机器名称不能Ping通,则说明机器名称解析有问题,请检测wins服务和DNS是否正确。

通过以上几步,一般MSDTC的通信就OK了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值