error hresult e_fail has been returned from a call to a com component

在 Asp.net 应用程序开发中,我们经常会同时遇到以下两个场景:

  1. 使用事务 TransactionScope
  2. Web 应用程序和 Sql Server 数据库部署到两台不同的服务器上

TransactionScope 需要使用到 MSDTC 服务,而在两台服务器上协调 MSDTC 服务确实是一件痛苦的事情,会遇到很多不同的问题。

以下是我遇到的问题之一,虽然最终解决了,但是解决方法不一定能够适用于所有的情况。

error hresult e_fail has been returned from a call to a com component

以下是分析和解决过程:

  1. 从网上能够查找到的90%的结果都是关于MSDTC设置的方法,如下:
     
  2. 在两台服务器上分别作了上面的设置,并且修改了防火墙等等,结果同样的问题还是出现
  3. 从老外的论坛上知道 DTCPing 这个工具,可以从微软网站上下载到:
    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=5e325025-4dcd-4658-a549-1d549ac17644
    注:这个工具必须要两台服务器上同时运行才能看到效果。
  4. 输入对方服务器的 IP 地址,运行 DTCPing,提示只能通过 NetBIOS 名来解析。
  5. 改为输入对方服务器的机器名,运行 DTCPing,提示无法解析。
    两台服务器虽然不在同一个域里面,但是在同一个工作组里面,并且彼此之间通过 IP 地址可以 Ping 通,为什么无法解析对方的机器名?
  6. 对比了一下网络连接设置,发现“子网掩码”不一样,改成一样的,再次运行 DTCPing,结果成功了。。。

注意:把网络 DTC 访问设置为“不要求进行验证”被认为是不安全的,常规的做法应该是把两个服务器接入到同一个域中,并且把网络 DTC 访问设置为“要求对双方进行验证”。

转载于:https://www.cnblogs.com/csharpstyle/articles/1618943.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值