none
oracle适配器应用碰到的怪问题 RRS feed

  • 问题

  • 我的程序一般在跑了5-6小时后报异常,开始异常如下:


    适配器“WCF-Custom”返回一条错误消息。详细信息为“System.InvalidOperationException: The reply is invalid because the underlying transaction object has been disposed. This occurs if the polling interval expires before receiving a reply. Use a higher value for polling interval. ---> System.ObjectDisposedException: 无法访问已释放的对象。
    对象名:“Transaction”。
       在 System.Transactions.DependentTransaction.Complete()
       在 Microsoft.Adapters.OracleDB.OracleDBInboundReply.AdapterReply(Message message, TimeSpan timeout)
       --- 内部异常堆栈跟踪的结尾 ---
       在 Microsoft.Adapters.OracleDB.OracleDBInboundReply.AdapterReply(Message message, TimeSpan timeout)
       在 Microsoft.Adapters.AdapterUtilities.AdapterInboundReply.Reply(Message message, TimeSpan timeout)
       在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterRequestContext.Reply(Message message, TimeSpan timeout)
       在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterRequestContext.Reply(Message message)
       在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.Reply(MessageRpc& rpc)”。
     然后所有的应用都不能正常运行了,都报以下一个异常,
    适配器“WCF-Custom”返回一条错误消息。详细信息为“System.Transactions.TransactionAbortedException: 已中止事务。 ---> System.TimeoutException: 事务超时
       --- 内部异常堆栈跟踪的结尾 ---
       在 Microsoft.ServiceModel.Channels.Common.Design.AdapterAsyncResult.End()
       在 Microsoft.ServiceModel.Channels.Common.Channels.AdapterReplyChannel.EndTryReceiveRequest(IAsyncResult result, RequestContext& requestContext)
       在 System.ServiceModel.Dispatcher.ReplyChannelBinder.EndTryReceive(IAsyncResult result, RequestContext& requestContext)
       在 System.ServiceModel.Dispatcher.ErrorHandlingReceiver.EndTryReceive(IAsyncResult result, RequestContext& requestContext)”。
     
    然后biztalk会自动采取补救措施,
    地址为 oracledb://JYZX?PollingId=7 的 WCF 服务主机已成功重新启动,因此关联的接收位置现在可以接收消息。
     
    平时这个补救措施是有用的,重启几次后,会连接上Oracle数据库,然后继续执行的。但每次程序运行5-6小时后,就怎么重启都不行了,所有实例都卡在正在运行的实例中了~~
    不知是什么原因,请帮忙看看有什么解决的办法。
    另外第一个错误中提到的polling interval,我设置的是6或者7秒,程序每次重启后,运行都是正常的。如果碰到上面的异常后,我只能完全停止应用,重启主机实例,然后删除所有挂起的实例,再次启动应用后,又能正常运行5-6小时了。
    2009年7月18日 9:44

全部回复

  • 去看你的数据库日志有什么异常。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月18日 20:22
  • to 楼主:

        请问你用的wcf adapter与bizTalk server是什么版本的?

        同时我推测这可能是那wcf adapdter存在的问题,是它的错误处理机制存在问题。我觉得你可以试试把wcf adapter的polling interval设置大一点(如: 30秒)。

        大家多交流一起进步吧,呵。。
    2009年7月19日 11:13