说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

COM+事务处理,Web Service,错误,高手请支持。

编辑:说三道四文库 发布时间:2018-06-24 07:30
HTML文档下载 WORD文档下载 PDF文档下载
语言:C#
数据库:(ms sql 2000)。
框架:1.1

结构是这样的:
数据层A访问Database A (ms sql 2000)。
数据层B访问Database B (ms sql 2000)。
商务层C(COM+自动事务处理,继承于System.EnterpriseServices.ServicedComponent),处理事务,访问数据层AB。
Web Service D 访问C层。
winForms客户端E访问Web Service D.

当我在商务层C设置:[Transaction(TransactionOption.Required )],[AutoComplete] 时候,出现如下错误信息,(注释掉上述标记时候系统运行良好,没有错误捕获)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: 服务器无法处理请求。 ---> System.Runtime.InteropServices.COMException (0x8004D024): 该事务管理器已经禁止了它对远程/网络事务的支持。

Server stack trace: 
   at System.Data.Common.ITransactionExportFactory.Create(UInt32 DTCLength, Byte[] DTCAddr, ITransactionExport& export)
   at System.Data.SqlClient.Transaction.CreateTransactionExport(Byte[] dtcAddr, UInt32 dtcLength, ITransaction transaction, ITransactionExport& transactionExport)
   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 Tianchi.RF.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected)
   at Tianchi.RF.Data.SystemDb.SystemDbResource.Create(String resourceName)
   at Tianchi.RF.Business.BizResource.Create(String resourceName)
   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 Tianchi.RF.RFServices.Resource.SrvResource.Create(Account& account, Int32 templateID, String resourceName)
   --- 内部异常堆栈跟踪的结尾 ---
   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at Tianchi.RF.RFDesigner.SrvResource.SrvResource.Create(Account& account, Int32 templateID, String resourceName)
   at Tianchi.RF.RFDesigner.Frame.Resource_RowChanged(Object sender, DataRowChangeEventArgs e)
应该是你代码的问题,就是说:[Transaction(TransactionOption.Required )],[AutoComplete] 没有错,而是你的函数写错了,当你不用[Transaction(TransactionOption.Required )],[AutoComplete]时,函数不执行事务,所以不报错,而当你使用了[Transaction(TransactionOption.Required )],[AutoComplete]时,函数要执行事务,而你的函数却无法正确执行事务,导致报错,请你把代码贴出来.
谢谢楼上的答复,但是为什么采用本机作为数据库服务器运行时不会出现任何问题呢?
我也不清楚,你调试一下看看哪一步出错了,这种问题只有自己最清楚,我也只是根据我的经验做判断.
权限的问题,w2003的安全性更高,用w2000试试
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘