主页 > C# > 利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止”

利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止”

利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止”

利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止”

最近利用COM+1.5开发一个系统,里边利用到了分布式事务。在开发机器和偶自己的虚拟机上测试正常,但是在测试服务器上测试报告“事务被明的或暗的终止”。PRB:利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止” - 庸俗的上帝 - 庸俗的上帝具体症状为:System.Runtime.InteropServices.COMException (0x8004D00E): 此事务已明地或暗地被确认或终止

Server stack trace:
at System.Data.Common.ITransactionExport.Export(ITransaction transaction, UInt32& transactionCookie)
at System.Data.SqlClient.Transaction.GetTransactionCookie(Byte[] dtcAddr, ITransaction transaction, ITransactionExport& transactionExport, Byte[]& cookie, Int32& length)
at System.Data.SqlClient.SqlInternalConnection.EnlistNonNullDistributedTransaction(ITransaction transaction)
at System.Data.SqlClient.SqlInternalConnection.EnlistDistributedTransaction(ITransaction newTransaction, Guid newTransactionGuid)
at System.Data.SqlClient.SqlInternalConnection.EnlistDistributedTransaction()
at System.Data.SqlClient.SqlInternalConnection.Activate(Boolean isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()
at Onest.IOS.UASM.UASMManager.Subscribe(String GatewayID, String Mobile, Int32 MobileType, String DestMobile, Int32 DestMobileType, String ServiceCode, String FeatureStr, Int32 SourceID, String Operator)
at System.Runtime.Remoting.Messaging.Message.Dispatch(Object target, Boolean fExecuteInContext)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Onest.IOS.UASM.UASMManager.Subscribe(String GatewayID, String Mobile, Int32 MobileType, String DestMobile, Int32 DestMobileType, String ServiceCode, String FeatureStr, Int32 SourceID, String Operator)
at Onest.IOS.UASM.Facade.UASMFacade.SubscribeNoDSMP(String GatewayID, String Mobile, Int32 MobileType, String DestMobile, Int32 DestMobileType, String ServiceCode, String FeatureStr, Int32 SourceID, String Operator)
at System.Runtime.Remoting.Messaging.Message.Dispatch(Object target, Boolean fExecuteInContext)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [1]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Onest.IOS.UASM.Facade.UASMFacade.SubscribeNoDSMP(String GatewayID, String Mobile, Int32 MobileType, String DestMobile, Int32 DestMobileType, String ServiceCode, String FeatureStr, Int32 SourceID, String Operator)
at UASMTest.Form1.btSubscribe_Click(Object sender, EventArgs e)
顺便说一句,偶的系统环境为:测试服务器为单独的windows2003服务器;数据库服务器为公司统一的数据库服务器,并且被加入到公司的域中;偶本人的计算机虽然没有加入到域,但偶在访问数据库服务时让其记住了密码,俺的虚拟机也是一样PRB:利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止” - 庸俗的上帝 - 庸俗的上帝。后来查证就是这个问题迷惑了偶好几天PRB:利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止” - 庸俗的上帝 - 庸俗的上帝
经过在微软kb的艰苦的搜索工作,终于发现,原来在windows2003中为了增强其安全性,微软调整了MSDTC RPC通讯的安全策略,偶自己的开发机器可以进行事务操作是因为应用程序直接继承了偶得身份到服务器进行验证,所以可以正常运行;而测试服务器则没有权限进行相关的操作。
解决方案:修改注册表:LOCAL_Machine\Software\Microsoft\MSDTC下建立DBWrod的子项TurnOffRPCSecurity,并且设置值为1,重启服务器即可。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的链接
利用MSDTC进行分布式开发时报告“事务被明的或暗的被终止” 来自 推推宝
顶部