none
WCF-OracleDb Null Reference Exception RRS feed

  • Question

  • Hi there,

    I am polling an Oracle Function, Everything works fine, except when the message contains complex type (sub xml nodes)

    Here is the error message I am getting :

    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
       à Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteComplexArray(XmlDictionaryWriter writer, OracleStructuredTypeMetadata typeMetadata, Object objVal, MetadataLookup mMetadataLookup, OracleCommonExecutionHelper executionHelper)
       à Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteComplexType(XmlDictionaryWriter writer, StructuredTypeMetadata typeMetadata, Object objVal, MetadataLookup metadataLookup, OracleCommonExecutionHelper executionHelper)
       à Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteTopLevelParameter(XmlDictionaryWriter writer, String displayName, QualifiedTypeContainer p, IOracleMetadataProperties metadataProperties, OracleParameter oracleParameter, String topLevelNameSpace)
       à Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.WriteParameters(XmlDictionaryWriter writer)
       à Microsoft.Adapters.OracleCommon.ProcedureResponseBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)
       à System.ServiceModel.Channels.BodyWriter.WriteBodyContents(XmlDictionaryWriter writer)
       à System.ServiceModel.Channels.BodyWriterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)
       à System.ServiceModel.Channels.Message.WriteBodyContents(XmlDictionaryWriter writer)
       à Microsoft.Adapters.AdapterUtilities.AdapterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)
       à System.ServiceModel.Channels.Message.WriteBodyContents(XmlDictionaryWriter writer)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkMessageStream(Message wcfMessage, IAdapterConfigInboundMessageMarshalling config)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkMessage(IBaseMessageFactory messageFactory, IAdapterConfigInboundMessageMarshalling marshallingConfig, Message wcfMessage)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfMarshaller.CreateBizTalkSubmitMessage(IBaseMessageFactory factory, String inboundTransportLocation, String inboundTransportType, RLConfig config, Message wcfMessage, String ssoToken)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkSubmitBase..ctor(Message message, BizTalkEndpointContext endpointContext, ControlledTermination control, AsyncCallback realCallback, String ssoToken)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkSubmitTxn..ctor(Message message, AsyncCallback callback, Object state, Transaction transaction, BizTalkEndpointContext endpointContext, String ssoToken, ControlledTermination control)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkOperation.Create(Message message, AsyncCallback callback, Object state, String ssoToken, Boolean bizTalkOneWay, BizTalkEndpointContext endpointContext, ControlledTermination control)
       à Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkServiceInstance.BeginOperation(Message message, AsyncCallback callback, Object state, Boolean bizTalkOneWay)".

     

    When I traced the ODP.NET here is the log where I can see an exception : 

    TIME:2011/03/18-16:43:51:435 TID:1e24  (EXCPT) Lvl0: (Type=System.IO.FileNotFoundException) (Msg=Impossible de charger le fichier ou l'assembly 'ty2lnbn1, Version=3.0.1.0, Culture=neutral, PublicKeyToken=null' ou une de ses dépendances. Le fichier spécifié est introuvable.) (Stack=   à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
       à System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
       à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
       à System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
       à System.Reflection.Assembly.Load(String assemblyString)
       à Oracle.DataAccess.Types.OracleUdt.GetAllReferencedAssemblies())

     

    Any idea on how I could resolve the issue?

    Regards

     


    BizTalk Consultant in France
    Monday, March 21, 2011 9:19 AM

Answers

  • Hi there,

     

    I know I'm feeling a bit alone, but just in case someone feels as alone as me, there is a begining of an explanation in the this article, where there is a list of Adapter Limitations.

    One of the limitations is The Oracle Database adapter supports UDT nesting only up to two levels.

    Why the hell is this a limitation? why couldn't I retrieve nested UDTs with more levels? pfff, this is just silly

     

    Regards,

    Stefan


    BizTalk Consultant in France
    Monday, March 21, 2011 3:09 PM

All replies

  • Hi there,

     

    I know I'm feeling a bit alone, but just in case someone feels as alone as me, there is a begining of an explanation in the this article, where there is a list of Adapter Limitations.

    One of the limitations is The Oracle Database adapter supports UDT nesting only up to two levels.

    Why the hell is this a limitation? why couldn't I retrieve nested UDTs with more levels? pfff, this is just silly

     

    Regards,

    Stefan


    BizTalk Consultant in France
    Monday, March 21, 2011 3:09 PM
  • Well, the reason UDT nesting is limited to 2 levels is because ODP.NET behaved unexpectedly with higher levels of nesting. We saw issues like data corruption, and Access Violations when we worked with UDTs that were nested deeper than two levels.
    -- Please mark as answered if this answers your question.
    Tuesday, March 22, 2011 5:24 AM
  • With which version of the ODP.NET were these limitations? Does someone care about updating the Adapter with the latest version of ODP.NET? and hence reducing the large list of limitations?

     

    If the error occured two years ago, it may not occur now with the new version of the ODP.NET

     

    Regards,

     


    BizTalk Consultant in France
    Tuesday, March 22, 2011 9:10 AM
  • I would suggest you to ask your support contact to open an 'RFC' so that the product team can look into this directly.

    Thanks,
    Manas


    -- Please mark as answered if this answers your question.
    Tuesday, March 22, 2011 10:26 AM
  • I have no support contact with Microsoft, and hence, I cannot contact the product team to update BizTalk Adapters.

    However, I asked our internal team dealing with Oracle to lessen the number of nested elements because "BizTalk Server" does not know how to handle them :-)

     

     

     


    BizTalk Consultant in France
    Tuesday, March 22, 2011 1:45 PM
  • Hi All,

    I am getting this error, even when the nested table is only two levels. Were you guys able to find a work around for this ? Please advice. I posted detailed error messages in the post.

    https://social.technet.microsoft.com/Forums/en-US/e02f6756-6efd-4971-9662-b865a301018e/executing-oracle-procedure-with-nested-table-user-defined-types?forum=biztalkgeneral


    Thanks, Pavan MCTS-Microsoft Biztalk Windows Server 2010


    • Edited by Pavan05 Wednesday, December 7, 2016 3:20 AM
    Wednesday, December 7, 2016 3:19 AM