Quanto mi piace immergermi negli abissi profondi di BizTalk, è una cosa a dir poco orgasmica.
Ho un Trace SQL, che mi sono preparato con pazienza e che permette di filtrare gli eventi più interessanti che BizTalk scatena durante il suo lavoro.
Vi garantisco che si scoprono cose estremamente interessanti, è possibile vedere la chiamata di host bts_DeQueueMessages_[HosTname] effettuata dall'Host Instance per eseguire lo spool dei messaggi.
L' inserimento delle property mediante la bts_InsertProperty e la fatidica bts_FindSubscriptions per la ricerca delle sottoscrizioni.
Penso che non esista niente di meglio per capire come esattamente funzioni ma soprattutto quali armi abbiamo a disposizione per poter intervenire e capire eventuali problemi.
Alcuni tipi di query possono esserci di grande aiuto a capire come un BizTalk Server sta funzionando e come è configurato.
In particolare mi sento sempre fare queste domande:
Come è possibile eseguire il resume di più messaggi?, Come faccio a capire quante istanze stanno lavorando bene e quali hanno problemi?
Chiaro che dalla Hub è possibile eseguire delle query ma non abbiamo a disposizione tantissimo.
Basta un pò di pazienza ed è BizTalk stesso a fornirci le risposte che cerchiamo.
Per provare queste queries non bisogna far altro che copiare il testo e eseguirlo in SQL 2005.
Configurazione delle messagebox:
declare @p2 nvarchar(128)
set @p2=N'NOMEMACCHINA'
declare @p3 nvarchar(128)
set @p3=N'BizTalkMsgBoxDb'
declare @p4 int
set @p4=1
declare @p5 int
set @p5=60
exec admsvr_LoadMsgBoxGroupProperties @nvcGroupName=N'BizTalk Group',@nvcMasterDBServer=@p2 output,@nvcMasterDBName=@p3 output,@nNumMsgboxServers=@p4 output,@nCacheRefreshInterval=@p5 output
select @p2, @p3, @p4, @p5
Per capire quale sia la master, disabilitare la pubblicazione dei messaggi ecc..
Ecco tutte le istance in sospeso
exec ops_OperateOnInstances @snOperation=0,@fMultiMessagebox=0,@uidInstanceID='00000000-0000-0000-0000-000000000000',@nvcApplication=N'',@snApplicationOperator=0,@nvcHost=N'',@snHostOperator=0,@nServiceClass=111,@snServiceClassOperator=0,@uidServiceType='00000000-0000-0000-0000-000000000000',@snServiceTypeOperator=0,@nStatus=36,@snStatusOperator=1,@nPendingOperation=1,@snPendingOperationOperator=0,@dtPendingOperationTimeFrom='Jan 1 1753 12:00:00:000AM',@dtPendingOperationTimeUntil='Dec 31 9999 10:59:59:997PM',@dtStartFrom='Jan 1 1753 12:00:00:000AM',@dtStartUntil='Dec 31 9999 10:59:59:997PM',@nvcErrorCode=N'',@snErrorCodeOperator=0,@nvcErrorDescription=N'',@snErrorDescriptionOperator=0,@nvcURI=N'',@snURIOperator=0,@dtStartSuspend='Jan 1 1753 12:00:00:000AM',@dtEndSuspend='Dec 31 9999 10:59:59:997PM',@nvcAdapter=N'',@snAdapterOperator=0,@nGroupingCriteria=0,@nGroupingMinCount=0,@nMaxMatches=51,@uidAccessorID='4386A978-682A-4F58-B32D-D9BA0D074F64',@nIsMasterMsgBox=0
Per eseguire un filter più rilassato è meglio filtrare in TexData su NotLike %bts_DeQueueMessages_NOMEHOST%
a meno che non vogliate vedere il cuore di BizTalk battere, è comunque carino.
La stored bts_DeQueueMessages_NOMEHOST viene chiamata continuamente dal relativo Host per eseguire lo spool dei messaggi.
Alla lunga risulta fastidiosa ma offre un buon punto di riferimento su alcune letture.
Per eseguire il resume di un messaggio BizTalk esegue questa chiamata:
set @p21=0
exec [dbo].[bts_UpdateMsgbox_NinoHost] @nArtifactType=1,@nAction=207,@uidObjectID=N'{6D12B877-ADFF-4B54-98B1-CB4A1A6B5E68}',@uidInstanceID=N'{6D12B877-ADFF-4B54-98B1-CB4A1A6B5E68}',@uidServiceID=N'{C97C4CB1-A853-413B-A3C6-C1CAECB74ABF}',@uidClassID=N'{59F295B0-3123-416E-966B-A2C6D65FF8E6}',@uidActivationID=N'{16B83A2B-CAAE-4581-B36F-675AA582CA6C}',@uidInstanceStateID=NULL,@uidWorkID=NULL,@uidPortID=NULL,@nvcErrorID=NULL,@nErrorCategory=0,@nvcAdditionalInfo=NULL,@nIsResumable=0,@dtResubmitTimeStamp='Dec 30 1899 12:00:00:000AM',@nvcLastAction=NULL,@nvcURL=NULL,@nvcAdapter=NULL,@fOptimize=1,@uidDBOwnerID=@p20 output,@nReturn=@p21 output
select @p20, @p21
Cchiaro che per lavorare al meglio sia necessario decodificare le varie informazioni, mi riferisco ai vari UID.
Per fare questo è necessario fare affidamento alle relative tabelle, quali la Applications, la famosa SPOOL dove abbiamo il messageType e il uidMessageID.
Ecco il Trace Template