none
BizTalk 2010 zusätzliche, "Nachrichtenfremde" Dateien kopieren

    Frage

  • Hallo liebe BizTalk-Gurus,

    ich empfange Nachrichten in denen eine Datei spezifiziert wird die in das Zielsystem kopiert werden muss (Bilder, PDF usw.). Die Spezifikation erfolgt in einem Attribtut der Nachricht und stellt einen Http-Link dar.

    Nun die Frage: Gibt es mit BizTalk Bordmitteln eine Möglichkeit solche zusätzlichen Dateien zu transportieren oder muss ich ein Assembly erstellen, welches das Verzeichnis aus dem Send-Port holt und zu der, durch die Orchestrierung verarbeiteten Nachricht, die hier spezifizierten Dateien ablegt.

    So habe ich dann im Ergebnis für den Import in ein Fremdsystem eine XML-Datei und beliebige n-Dateien mit unterschiedlichen Formaten und Inhalten.

    Danke!

    Mittwoch, 18. April 2012 07:38

Antworten

  • Hallo KriegerK,

    der Ansatz mit einer Hilfsklasse den Transfer durchzuführen ist hier der richtige. 

    Füge Deine externe Assembly auf jeden Fall den Ressourcen Deiner Anwendung in der Management Console hinzu.

    Achte dabei darauf, dass die Assembly dabei auch in den GAC kopiert wird.

    Sofern die Orchestrierungsinstanz aufgrund einer nichtbehandleten Exception supended wird, gibt es mindestens auch

    einen Eintrag im System Event Log. Alternativ erscheint die Error Message auch noch bei einem Doppelklick

    auf die Instanz in der Mgmt. Console.

    Gruß,

    Mirko 

    • Als Antwort markiert KriegerK Donnerstag, 19. April 2012 13:12
    Donnerstag, 19. April 2012 12:11

Alle Antworten

  • Hallo,

    ich habe nun einen weiteren Versuch gestartet, leider ohne Erfolg. Ich habe wie oben beschrieben ein Assembly erstellt welches ich aus der Orchestration aufrufe:

    namespace TransportExternalFiles
    {
        public class transportextMain
        {
            public static Boolean transportFile(string httpSource, string fileTarget)
            {
                Boolean result = false;
                try
                {
                    HttpWebRequest reqDownload = (HttpWebRequest)WebRequest.Create(httpSource);
                    reqDownload.Proxy = new WebProxy("0.0.0.0", 0); //Die Proxyeinstellungen habe ich geändert!
                    Stream smResp = reqDownload.GetResponse().GetResponseStream();
                    Stream smFile = File.Create(fileTarget); 
                    byte[] yBuffer = new byte[2048]; 
                    int nSize = 0; 
                    while ((nSize = smResp.Read(yBuffer, 0, yBuffer.Length)) > 0) 
                        smFile.Write(yBuffer, 0, nSize); 
                    smResp.Close(); 
                    smFile.Close(); 
                    result = true;
                }
                catch (Exception ex)
                {
                    result = false;
                    throw new ApplicationException(ex.Message);
                }
                return result;
            }
        }
    }

    Wenn ich nun das neue Assembly von einer EXE aus starte -> kein Problem! Wenn ich das Assembly aus der Orchestration nutze wird diese "Suspended by Administrator". Kann das ein Berechtigungsproblem sein oder habe ich das Assembly nicht richtig eingebunden? Die Abhängigkeit des Orchestrierung wird in der Administrationsoberfläche richtig angezeigt, im Ereignisprotokoll sind hierzu keine Einträge zu finden. Kann das ein Berechtigungsproblem des Dienstusers sein?

    Danke!

      

    Donnerstag, 19. April 2012 07:07
  • Hallo KriegerK,

    der Ansatz mit einer Hilfsklasse den Transfer durchzuführen ist hier der richtige. 

    Füge Deine externe Assembly auf jeden Fall den Ressourcen Deiner Anwendung in der Management Console hinzu.

    Achte dabei darauf, dass die Assembly dabei auch in den GAC kopiert wird.

    Sofern die Orchestrierungsinstanz aufgrund einer nichtbehandleten Exception supended wird, gibt es mindestens auch

    einen Eintrag im System Event Log. Alternativ erscheint die Error Message auch noch bei einem Doppelklick

    auf die Instanz in der Mgmt. Console.

    Gruß,

    Mirko 

    • Als Antwort markiert KriegerK Donnerstag, 19. April 2012 13:12
    Donnerstag, 19. April 2012 12:11
  • Hallo Mirko,

    vielen Dank! Tatsächlich hat der Haken für die GAC-Ressource gefehlt!

    GAC: die erste Option vergessen zu klicken...

    Donnerstag, 19. April 2012 13:16