Domanda

Sto scrivendo un'applicazione console C # che prende un file binario, lo strappa, lo analizza e memorizza i dati in un database.

Vogliamo usare BizTalk per orchestrare la visione quando un nuovo file binario viene inserito in una directory e chiama la mia applicazione con il nome / i nomi dei file da analizzare.

BizTalk può eseguire un programma da riga di comando?
Può passare i parametri della riga di comando al programma?
Come riferirei a BizTalk che l'ultima corsa è stata un successo o un fallimento?

Grazie,
Keith

È stato utile?

Soluzione

Vorrei non raccomandare di farlo, ma in teoria potresti eseguire l'exe usando un comando shell all'interno di una forma di espressione:

System.Diagnostics.Process.Start (@ " C: \ yourpath \ yourExecutable.exe ")

Lo spazio dei nomi System.Diagnostics è disponibile in BizTalk 2006, non credo sia disponibile in BizTalk 2004 (BizTalk 2004 aveva un sottoinsieme molto limitato dello spazio dei nomi di sistema disponibile).

Non sono sicuro di recuperare i valori restituiti, ma dovresti sicuramente essere in grado di fornire parametri.

Alcuni riferimenti ai comandi della shell C # sono disponibili qui e qui .

Personalmente penso che ci siano tre migliori opzioni disponibili:

  1. Non usare BizTalk.

    Come suggerisce Campbell, usa invece un servizio Windows.

    Utilizzare BizTalk solo per qualcosa del genere se si desidera sfruttare un framework BizTalk già esistente (registrazione, creazione di report, ecc ...) o se si hanno altre attività in un flusso di lavoro che BizTalk eseguirà. (Ci sono argomenti per mettere tutto in una piattaforma - se usi BizTalk per una cosa, usa if per tutto, ma questa è una conversazione diversa).

  2. Ricalcola la logica del tuo shredder in una libreria di classe C # che sia l'applicazione Console che BizTalk possono chiamare.

    Chiamare una libreria di classi da BizTalk è molto più facile da eseguire in modo pulito e affidabile come sarebbe chiamare un eseguibile.

    È sufficiente fare riferimento all'assembly firmato e GACed da un'orchestrazione (crearlo come variabile di orchestrazione) e quindi è possibile chiamarlo direttamente da una forma di espressione.

    qui è un articolo su questo che copre le basi. Non entra in molti brutti dettagli né offre discussioni sulle migliori pratiche. Professional BizTalk Server 2006 è un buon libro per questo.

  3. Come diceva Campbell, la maggior parte di questo può probabilmente essere fatto con pura funzionalità BizTalk.

Penso che forse un mix di opzioni 2 e 3 sarebbe il migliore per quello che vuoi. Inserisci la logica di distruzione binaria che hai già in una libreria di classi C # e chiamala all'interno di un'orchestrazione BizTalk che si occupa del monitoraggio dei file, della notifica degli errori, del tracciamento e dell'integrazione con altri processi.

Altri suggerimenti

Biztalk è un prodotto server, quindi sarà sempre in esecuzione in background quando lo si configura in un ambiente di produzione.

Suggerirei che se si desidera utilizzare BizTalk, è necessario impostarlo per controllare la posizione in cui il file verrà rilasciato, strapparlo, analizzarlo e quindi scrivere nel database tutto all'interno di un flusso di lavoro BizTalk. È esattamente quello per cui è stato progettato. Il flusso di lavoro potrebbe contenere anche notifiche oppure potresti semplicemente utilizzare il rilevamento BizTalk per confermare se l'operazione è stata eseguita correttamente. L'unico codice personalizzato che potresti dover scrivere è un disassemblatore per il tuo file binario per trasformarlo in XML. Ciò verrebbe fatto come componente della pipeline di ricezione.

Se questo è tutto ciò che fai, BizTalk è un diavolo di un'opzione costosa proprio per questo. Ti suggerisco di scrivere il tuo servizio Windows e utilizzare FileSystemWatcher per intercettare il fatto che un file è stato scritto e quindi eseguire l'elaborazione nel tuo codice C #.

BizTalk che chiama un'applicazione C # è un po 'fuori dal suo riquadro. Abbiamo avuto problemi come questo in passato e abbiamo le applicazioni della console scritte o racchiuse come un servizio web. In questo modo, Biztalk preleva il file da eliminare e lo invia all'applicazione del servizio Web dell'app. Ciò rientra nella parte del "coltellino svizzero" di come utilizziamo BizTalk. Questo è davvero poco. Tuttavia, BizTalk fornisce elementi come il monitoraggio, la BAM, l'accodamento per guasti a distanza, ecc. Abbiamo anche iniziato a copiare file in posizioni di archivio, leggere codici di risultati dai servizi Web e utilizzare l'adattatore SMTP per inviare notifiche di esito positivo o negativo.

Spero che questo ti dia alcune idee. Buona fortuna!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top