none
WCF-Adapter Oracle - Schema error message

Antworten

  • Hallo Johannes und dir auch ein Frohes Neues :)

     

    Also grundsätzlich hast du dann zwei Möglichkeiten.

     

    1. Du installierst die 64bit Oracle client (ODAC Oracle Data Access Components) Version, die du auf www.oracle.com findest: http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

    Die Einstellungen des Projektes sind da nicht so wichtig. Beim generieren des XSD in Visual Studio werden immer die 32bit Assemblies angezogen, da VS im 32bit Modus läuft. Daher fällt das 64bit Problem erst später auf.

     

    2. Du ziehst die Oracle Ports auf eine 32bit Host Instanz um. Dann zieht diese die 32bit DLLs und alles sollte funktionieren. Das wäre auch meine Wahl.

     

    Solltest du nur eine andere Oracle Version haben und die 2.111.7.0 nicht finden, kannst du folgendes machen: http://pi.hauth.me/oracle-dataaccess-use-a-different-version/?lang=de


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    • Als Antwort markiert TheDuke123456 Montag, 3. Januar 2011 13:39
    Montag, 3. Januar 2011 12:48
  • Ja, auch deutsch. Und da wir hier in den Deutschen BizTalk Foren sind, lass uns mal die Sprache wechseln.

    Genau dieser Operation_1 ist die Operation. Davon kannst du theoretische mehrere pro Port haben. Ich würde diese Operation erstmal umbenennen, zum Beispiel: SELECT_XXX (XXX = Tabelle). Dann ist das schonmal aussagekräftiger. Und dann musst du in deiner Port Konfiguration im BtsActionMapping Name="Select" ändern in Name="SELECT_XXX". Dies muss mit der Operation übereinstimmen, da BizTalk hier den Zusammenhang zwischen seiner internen Operation und der WCF Action herstellt. Dann sollte es funktionieren.


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    • Als Antwort markiert TheDuke123456 Montag, 3. Januar 2011 13:39
    Donnerstag, 16. Dezember 2010 10:16

Alle Antworten

  • The BtsActionMapping is a utility to map your Operation (BTS.Operation) to an Action (WCF.Action) for your WCF based port.

    So looking at your message your Operation should be called "Select" (the operation on your send / response port in your orchestration) and the Action is called http://Microsoft.LobServices.OracleDB/2007/03/XXX/Select. If not, replace XXX with the name of the table of your select or copy it from the BindingsInfo file in your Visual Studio solution.

    Also see this thread: http://social.msdn.microsoft.com/forums/en-US/biztalkr2adapters/thread/22a88e75-52db-45e7-a6c3-e6de6312ecb8/

     

    PS: German or wrong forum?


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    Dienstag, 14. Dezember 2010 19:18
  • i´m german, you too?

    XXX is only a placeholder for the tablename, which i didn´t want to publish.

    well i don´t understand want you mean with: "So looking at your message your Operation should be called "Select" (the operation on your send / response port in your orchestration) and the Action is called http://Microsoft.LobServices.OracleDB/2007/03/XXX/Select."

    first i receive a message, then i map it into my Select Message (from generated schema), this select message is sent to the Request-Response port.

    Where is the operation from the RR-port? there is only the Operation-identifier "Operation_1".

    sorry, i´m new at BT but thank you very much for helping me!!

    Donnerstag, 16. Dezember 2010 09:34
  • Ja, auch deutsch. Und da wir hier in den Deutschen BizTalk Foren sind, lass uns mal die Sprache wechseln.

    Genau dieser Operation_1 ist die Operation. Davon kannst du theoretische mehrere pro Port haben. Ich würde diese Operation erstmal umbenennen, zum Beispiel: SELECT_XXX (XXX = Tabelle). Dann ist das schonmal aussagekräftiger. Und dann musst du in deiner Port Konfiguration im BtsActionMapping Name="Select" ändern in Name="SELECT_XXX". Dies muss mit der Operation übereinstimmen, da BizTalk hier den Zusammenhang zwischen seiner internen Operation und der WCF Action herstellt. Dann sollte es funktionieren.


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    • Als Antwort markiert TheDuke123456 Montag, 3. Januar 2011 13:39
    Donnerstag, 16. Dezember 2010 10:16
  • Hast du mal geprüft, ob die Datei die ankommt auch zum Schema passt? Und ist auch die gleiche Version im GAC?
    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    Donnerstag, 16. Dezember 2010 17:39
  • ja schema passt und die Version im GAC ist auch gleich. auch in der MngmtDB (oder so :) ) ists richtig drin... ich verstehs nicht :( irgendwelche andere vorschläge?
    Dienstag, 21. Dezember 2010 15:59
  • So ohne Weiteres leider nicht. Kannst du einige Daten mal als Beispiel bereitstellen? Dann kann man versuchen das nachzubauen.

    Alternativ kannst du dich auch an den Microsoft Support wenden.


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    Dienstag, 21. Dezember 2010 19:09
  • so wieder aus dem Urlaub zurück und ein frohes neues Jahr an alle, vor allem dir Oliver,

    ich hab jetzt nochmal n komplet neues Projekt erstellt, hab jetzt allerdings wieder einen "alten" Fehler:

    A message sent to adapter "WCF-Custom" on send port "WcfSendPort_OracleDBBinding_DMART_Table_BT_HERSTELLER_Custom" with URI "oracledb://dmart.domain.de:1524/dmart/Dedicated" is suspended.
     Error details: System.IO.FileNotFoundException: Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.
    File name: 'Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342'
       at Microsoft.Adapters.OracleDB.OracleDBBinding.Initialize()
       at Microsoft.Adapters.OracleDB.OracleDBBinding.CreateBindingElements()
       at System.ServiceModel.Channels.CustomBinding..ctor(Binding binding)
       at System.ServiceModel.Channels.Binding.CanBuildChannelFactory[TChannel](BindingParameterCollection parameters)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfUtils.IsQueuedSend(Binding binding)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.InitializeValues(IBaseMessage message)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2..ctor(IBaseMessage message, WcfTransmitter`2 transmitter)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfTransmitter`2.GetClientFromCache(String spid, IBaseMessage message)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfAsyncBatch`2.BatchWorker(List`1 messages)

    WRN: Assembly binding logging is turned OFF.
    To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
    Note: There is some performance penalty associated with assembly bind failure logging.
    To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

     

    das komische ist, dass diese DLL im GAC vorhanden ist(die x86 Version). Dazu habe ich im Internet gefunden dass das am 64bit OS liegt. Da habe ich dann bei "target platform" (VisualStudio) x86 eingestellt und dann sind die o.g. Fehler aufgekommen. Doch nun bringt diese Einstellung nichts mehr. Aber vielleicht hast du ja zu der Fehlermeldung eine bessere Problemlösung als die, die ich im Internet gefunden habe?

     

    Gruß,

    Johannes

    Montag, 3. Januar 2011 12:36
  • Hallo Johannes und dir auch ein Frohes Neues :)

     

    Also grundsätzlich hast du dann zwei Möglichkeiten.

     

    1. Du installierst die 64bit Oracle client (ODAC Oracle Data Access Components) Version, die du auf www.oracle.com findest: http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

    Die Einstellungen des Projektes sind da nicht so wichtig. Beim generieren des XSD in Visual Studio werden immer die 32bit Assemblies angezogen, da VS im 32bit Modus läuft. Daher fällt das 64bit Problem erst später auf.

     

    2. Du ziehst die Oracle Ports auf eine 32bit Host Instanz um. Dann zieht diese die 32bit DLLs und alles sollte funktionieren. Das wäre auch meine Wahl.

     

    Solltest du nur eine andere Oracle Version haben und die 2.111.7.0 nicht finden, kannst du folgendes machen: http://pi.hauth.me/oracle-dataaccess-use-a-different-version/?lang=de


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    • Als Antwort markiert TheDuke123456 Montag, 3. Januar 2011 13:39
    Montag, 3. Januar 2011 12:48
  • 2. Du ziehst die Oracle Ports auf eine 32bit Host Instanz um. Dann zieht diese die 32bit DLLs und alles sollte funktionieren. Das wäre auch meine Wahl.

    genau die Einstellung hab ich damals gemacht, vielen Dank. Wie ist das eigentlich, soll ich nur den einen Port mit der 32bit Hostinstanz laufen lassen oder alle Anderen auch (wo es allerdings nicht auswählbar ist) und wie siehts mit der eigentlichen Applikation aus, die dann auch auf der 32bit Instanz laufen lassen oder nicht?

    bei mir ists bis jetzt so: Applikation und OracalePort auf der 32bit Hostinstanz und die anderen Ports auf dem normalen (wahrs. 64bit)

    und genau jetzt kommt folgender Fehler: (PS: du musst den nicht genau durchlesen, ich hab den schon behoben, ist nur für welche die evtl dann auf den gleichen Fehler kommen)

     

    Event Type:    Error
    Event Source:    BizTalk Server 2009
    Event Category:    BizTalk Server 2009
    Event ID:    5754
    Date:        03.01.2011
    Time:        13:59:24
    User:        N/A
    Computer:    AMB
    Description:
    A message sent to adapter "WCF-Custom" on send port "WcfSendPort_OracleDBBinding_DMART_Table_BT_HERSTELLER_Custom" with URI "oracledb://dmart.domain.de:1524/dmart/Dedicated" is suspended.
     Error details: Microsoft.ServiceModel.Channels.Common.MetadataException: Metadata resolution failed for OperationId: "http://Microsoft.LobServices.OracleDB/2007/03/DMART/Table/BT_HERSTELLER/Select". ---> Microsoft.ServiceModel.Channels.Common.ConnectionException: Due to an Oracle Client limitation, the adapter failed to open a connection. This is because either (a) ambient transaction is present and the TNS alias is longer than 39 characters, or (b) ambient transaction is present and a non-TNS based URI was used. To resolve this, use a TNS alias to connect to Oracle and make sure it is not more than 39 characters.
       at Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
       --- End of inner exception stack trace ---

    Server stack trace:
       at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)

    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 System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)
       at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)

     

     

    den hab ich folgenderweise behoben:

    In the oracleDBbinding I changed the following propertys:

    "enableBizTalkCompatibilityMode" = True (For some reasons this i set to false per default)

    "useAmbientTransaction" = False

    Jumped to the Message tab and uncheck the "Use Transaction" box under Transactions.

     

    so und jetzt kommts: ES GEHT!!! man bin ich froh... so lange gebraucht um so ein eigentlich einfaches Problem zu lösen!

     

    Ich danke dir vielmals Oliver!! Du hast dir sehr viel Mühe gegeben um mir weiterzuhelfen!!

    Arbeitest du schon lange mit BizTalk? Hast du viel mit ihm zu tun?

    Weißt du eigentlich ob es Addins für Biztalk gibt um Workflows einfacher zu realisieren?

    Gruß,

    Johannes

    Montag, 3. Januar 2011 13:39
  • Na, geht doch :)

     

    useAmbientTransactions ist auch noch so eine Falle, die ich ständig vergesse.

    Der SAP Adapter und diverse andere Adapter laufen auch nur unter 32bit. Generell würde ich aber alles andere auf 64bit laufen lassen. Such mal den BizTalk BPA (Best Practice Analyzer) und lass den laufen, der zeigt dir sowas alles an.

     

    Für den Rest, meld dich mal bei oliver@hauth.me - das passt nicht so ins Forum bzw. in den Thread.


    If you like my post or consider it as a valid answer, please use the buttons to show me - Oliver

    http://pi.hauth.me

    Montag, 3. Januar 2011 13:46