Assembly BizTalk
L'aspetto più importante di Microsoft BizTalk Server e di .NET Framework è rappresentato da tutti gli elementi BizTalk Server: mappe, schemi, orchestrazioni e pipeline, vengono compilati in assembly .NET. Le due implicazioni più importanti di questa progettazione sono il fatto che questi assembly devono avere nomi sicuri e che, di conseguenza, seguono anche le regole di controllo delle versioni .NET. Ne deriva principalmente che un progetto BizTalk, dopo essere stato generato con una particolare versione di un altro progetto o assembly .NET, compresi i progetti BizTalk, continua a utilizzare quella versione finché non viene rigenerato con una versione più recente.
Controllo delle versioni .NET e assembly
Durante lo sviluppo si verifica un problema comune legato al controllo delle versioni .NET quando i numeri di versione in un progetto BizTalk non vengono cambiati e l'assembly viene ridistribuito senza arrestare e avviare l'istanza dell'host BizTalk in cui sono caricati i tipi.
Quando il processo viene rieseguito, le modifiche non diventano effettive. Ciò è dovuto al modo in cui gli assembly .NET vengono caricati in memoria. Poiché l'host ha già una copia in memoria dell'assembly, non ricarica l'assembly quando in Cache assembly globali viene immessa una nuova copia. Se, ad esempio, con un'orchestrazione viene distribuita ed eseguita la versione 1.0.0.0 di un assembly e vengono apportate modifiche all'orchestrazione senza però cambiare il numero di versione, le modifiche non diventano effettive. Dopo l'arresto dell'istanza host, la copia in memoria dell'assembly viene rilasciata e al riavvio dell'istanza host viene ricaricata la nuova copia dell'assembly e vengono recepite le modifiche. Se fosse stata distribuita e caricata una nuova versione, ad esempio la 2.0.0.0, le modifiche sarebbero diventate effettive.
La distribuzione degli assembly in BizTalk Server è un processo articolato in due parti. La prima parte è la normale distribuzione dell'assembly .NET in cui l'assembly con nome sicuro viene distribuito alla Cache assembly globali (GAC, Global Assembly Cache) in ogni server in cui verrà utilizzato l'assembly. Il secondo passaggio consiste nella distribuzione dei metadati sugli assembly e i relativi tipi nel database di gestione BizTalk Server. Quando gli assembly BizTalk Server vengono caricati da BizTalk Server, nella maggior parte dei casi vengono caricati utilizzando il loro nome sicuro, trovato nel database di gestione.
Distribuzione degli assembly BizTalk Server nella GAC
Gli elementi di BizTalk Server creati da uno sviluppatore vengono compilati in classi derivate da tipi BizTalk Server incorporati. Un'orchestrazione diventa ad esempio una classe che deriva dalla classe Microsoft.BizTalkXLANGs.BTXEngine.BTXService. Poiché queste classi vengono distribuite in assembly nella Cache assembly globali e poiché questi assembly hanno dipendenze su altri assembly nella GAC, anche gli assembly dello sviluppatore devono venire distribuiti nella GAC.
Un'altra implicazione importante degli elementi di BizTalk Server che vengono distribuiti nella Cache assembly globali e che pertanto hanno un nome sicuro, è il fatto che gli assembly con nome sicuro non possono chiamare altri assembly che non hanno un nome sicuro. Ciò significa che anche qualsiasi assembly creato da uno sviluppatore e che è utilizzato da questi assembly BizTalk Server deve avere un nome sicuro. Analogamente, gli assembly distribuiti nella GAC che caricano altri assembly senza utilizzare un percorso specifico devono caricarli dalla GAC.
I componenti della pipeline vengono aggiunti alla casella degli strumenti di uno sviluppatore in Visual Studio per renderli disponibili per essere trascinati nella finestra di progettazione della pipeline. Quando una pipeline BizTalk Server viene compilata in un assembly .NET, le informazioni su tutti i componenti nelle varie fasi della pipeline vengono compilate nell'assembly. Quando questa pipeline viene distribuita in BizTalk Server, le informazioni sui componenti, incluso il nome file, vengono inserite nel database di gestione BizTalk e l'assembly della pipeline viene distribuito nella GAC. Tutti gli assembly aggiuntivi da cui dipendono i componenti della pipeline BizTalk devono essere distribuiti anche nella GAC per poter essere trovati in fase di esecuzione. Gli assembly dei componenti della pipeline devono essere copiati nella directory BizTalk Server\Pipeline Components per essere accessibili da una pipeline BizTalk in fase di esecuzione, indipendentemente dal fatto che l'assembly venga distribuito anche nella GAC. Durante l'esecuzione della pipeline, questi componenti vengono caricati e le interfacce implementate vengono chiamate nel modo appropriato. Se un assembly del componente della pipeline viene distribuito anche nella GAC, l'assembly verrà caricato dalla GAC in fase di esecuzione. Ciò può causare confusione se non viene fatto attenzione a garantire che l'assembly del componente della pipeline sia lo stesso nella directory BizTalk Server\Pipeline Components e nella GAC.