Query e controllo dell'istanza
In questo esempio viene illustrato come utilizzare il provider di query dell'archivio salvataggi permanenti e il provider di controllo. Il provider di query espone un'API C# che consente all'utente di eseguire query sulle istanze presenti in un archivio salvataggi permanenti. Il provider di controllo espone un'API C# che consente all'utente di eseguire comandi di controllo (sospensione, ripresa, annullamento, terminazione ed eliminazione) su un'istanza presente in un archivio salvataggi permanenti.
Questo esempio contiene un servizio di prova WF, un'applicazione console Windows per l'esecuzione di query sulle istanze e un'applicazione console Windows per il controllo delle istanze.
Nota
Gli esempi vengono forniti solo per scopi didattici. Non sono destinati a essere utilizzati in un ambiente di produzione e non sono stati testati in un ambiente di produzione. Microsoft non fornisce supporto tecnico per questi esempi.
Prerequisiti
Internet Information Services (IIS) versione 7.0
Archivio salvataggi permanenti inizializzato
Visual Studio 2010 e Windows Server AppFabric nello stesso computer
Percorso e file di esempio
Il documento Leggimi si trova in <esempi>\Samples\Hosting\InstanceQueryAndControl.
Tutti i file necessari per l'esecuzione di questo esempio si trovano in <esempi>\Samples\Hosting\InstanceQueryAndControl:
La cartella InstanceControl contiene tutti i file necessari per l'applicazione di esempio di controllo delle istanze.
La cartella InstanceQuery contiene tutti i file necessari per l'applicazione di esempio di esecuzione delle query sulle istanze.
La cartella TestWorkflow contiene tutti i file necessari per il flusso di lavoro di esempio.
Nel file di soluzione InstanceQueryAndControl.sln è definita la soluzione che consente di creare tutti gli elementi dell'esempio.
Installazione ed esecuzione dell'esempio
Creare un archivio salvataggi permanenti se non è stato fatto durante l'installazione di Windows Server AppFabric.
Eseguire C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.Configuration.exe come amministratore. Nella pagina Configura Worker selezionare la casella di controllo Imposta configurazione salvataggi permanenti. Selezionare sqlStoreProvider come provider salvataggi permanenti, quindi fare clic su Configura.
Nella finestra Configurazione archivio salvataggi permanenti SQL selezionare Aggiungi archivio di salvataggio permanente al file web.config radice e Inizializza archivio salvataggi permanenti. Specificare ApplicationServerWorkflowInstanceStore come nome del database dell'archivio salvataggi permanenti. Fare clic su OK per creare un database dell'archivio salvataggi permanenti con il nome specificato. Se si sceglie un nome di database diverso, è necessario modificare il codice di esempio (vedere di seguito).
Se si esegue l'esempio in un sistema a 64 bit, copiare il file C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll nella cartella del progetto.
Nota
Questo percorso verrà utilizzato nel passaggio 3.
Creare la soluzione.
Aprire Visual Studio 2010 come amministratore: Fare clic su Start --> Tutti i programmi --> Microsoft Visual Studio 2010. Fare clic con il pulsante destro del mouse su Microsoft Visual Studio 2010 e scegliere Esegui come amministratore.
Aprire il progetto di esempio: In Visual Studio scegliere File --> Apri --> Progetto/Soluzione. Selezionare il file della soluzione di esempio <esempi>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln. Durante l'apertura del file, viene visualizzato un avviso in cui si segnala che l'URL di IIS locale per il servizio di esempio non è ancora stato creato. Confermare la creazione della nuova directory virtuale.
Se si esegue l'esempio in un sistema a 64 bit, eseguire i passaggi seguenti per i progetti InstanceQuery e InstanceControl: Nella riga 17 del file Program.cs modificare il percorso del file Microsoft.ApplicationServer.StoreManagement.dll impostando la posizione in cui è stato copiato il file nel passaggio 2.
In questo esempio si presuppone che il flusso di lavoro venga salvato nel database di salvataggio permanente ApplicationServerWorkflowInstanceStore ospitato da SQL Express. È possibile modificare il nome del database e l'istanza del server SQL nelle righe 44 e 45 del file Program.cs del progetto InstanceControl e nelle righe 37 e 38 del file Program.cs del progetto InstanceQuery.
Premere F6 per creare la soluzione. L'applicazione TestWorkflow verrà distribuita automaticamente in IIS.
Configurare l'applicazione TestWorkflow.
Aprire Gestione IIS: Fare clic su Start --> Pannello di controllo --> Strumenti di amministrazione --> Gestione Internet Information Services (IIS).
Impostare il pool di applicazioni corretto e abilitare il protocollo net.pipe per il sito.
Nella finestra relativa alle connessioni IIS selezionare il nodo <computer>/Siti/Sito Web predefinito.
Nella finestra relativa alle azioni IIS fare clic su Impostazioni avanzate.
Cambiare l'impostazione Pool di applicazioni in ASP.NET v4.0.
Cambiare l'impostazione Protocolli abilitati in http,net.pipe. Attenzione: tra la virgola e net.pipe non vi è alcuno spazio.
Fare clic su OK.
Impostare il pool di applicazioni corretto e abilitare il protocollo net.pipe per l'applicazione.
Nella finestra relativa alle connessioni IIS selezionare il nodo <computer>/Siti/Sito Web predefinito/TestWorkflow.
Nella finestra relativa alle azioni IIS fare clic su Impostazioni avanzate.
Cambiare l'impostazione Pool di applicazioni in ASP.NET v4.0.
Cambiare l'impostazione Protocolli abilitati in http,net.pipe. Attenzione: tra la virgola e net.pipe non vi è alcuno spazio.
Fare clic su OK.
Creare le istanze di TestService.
Aprire l'applicazione WCF Test Client.
Nella finestra relativa alle connessioni di Gestione IIS selezionare il nodo <computer>/Siti/Sito Web predefinito/TestWorkflow.
Fare clic con il pulsante destro del mouse su TestWorkflow e scegliere Passa a visualizzazione contenuto.
Fare clic con il pulsante destro del mouse su TestService.xamlx e scegliere Sfoglia. Verrà avviato il browser in cui verrà visualizzata la pagina di benvenuto di TestService.
Aprire l'applicazione WCF Test Client come indicato di seguito: Aprire l'applicazione WCF Test Client. Fare clic su Start --> Tutti i programmi --> Microsoft Visual Studio 2010 --> Visual Studio Tools --> Prompt dei comandi di Visual Studio (2010). Al prompt dei comandi, digitare il comando wcftestclient.
Nella finestra dell'URL del browser copiare l'URL di TestService (ad esempio, "https://localhost/TestWorkflow/TestService.xamlx"). Nell'applicazione WCF Test Client fare clic con il pulsante destro del mouse su My Service Projects e scegliere Add Service. Quando viene chiesto l'indirizzo dell'endpoint, incollare l'URL di TestService.
Richiamare TestService come indicato di seguito:
Nella finestra dell'applicazione WCF Test Client fare doppio clic sul nodo Invoke() in IService (BasicHttpBinding_IService).
Nella scheda Invoke fare clic sul campo (null) nella colonna Value. Modificare la selezione da (null) a System.Nullable<System.Int32>. Espandere quindi il nodo int nella colonna Name. Verrà visualizzata una nuova riga con il valore 0.
Fare clic su Invoke. Verrà creata un'istanza di TestService che verrà eseguita per 10 minuti.
Impostare il valore su 1 e fare clic su Invoke. Verrà creata un'istanza di TestService che verrà immediatamente completata.
Impostare il valore su 2 e fare clic su Invoke. Verrà creata un'istanza di TestService che genererà un'eccezione e verrà sospesa.
Eseguire una query sulle istanze.
In Visual Studio verificare che InstanceQuery sia il progetto di avvio predefinito, quindi premere F5 per eseguire una query sulle istanze. Verrà aperta una finestra della console in cui verranno visualizzate le tre istanze create nel passaggio 5.b.
In alternativa, eseguire il comando InstanceQuery al prompt dei comandi:
- Aprire un prompt dei comandi. Eseguire il comando <esempi>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group].
Controllare le istanze.
- Al prompt dei comandi, eseguire il comando <esempi>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete]. Utilizzare il GUID ID composto da 20 caratteri di una qualsiasi delle istanze create in precedenza.
Rimozione dell'esempio
Eliminare tutte le istanze del servizio TestWorkflow dall'archivio salvataggi permanenti. Aprire una finestra della Console di amministrazione ed eseguire i comandi seguenti:
> powershell > import-module applicationServer > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
Dimostrazioni
L'esempio contiene tre progetti:
TestWorkflow implementa un servizio WF. Il servizio è ospitato in IIS. Ogniqualvolta il servizio viene richiamato, viene creata una nuova istanza del servizio. Quando si richiama il servizio tramite l'applicazione WCF Test Client, l'utente passa un parametro al servizio. A seconda di tale parametro, l'istanza viene eseguita per 10 minuti, viene immediatamente completata o genera un'eccezione.
InstanceQuery implementa un'applicazione console che esegue una query sull'archivio salvataggi permanenti e visualizza i risultati nella schermata. L'utente deve specificare il tipo di query, i parametri della query e la stringa di collegamento dell'archivio salvataggi permanenti.
InstanceControl implementa un'applicazione console che esegue un comando di controllo su un'istanza presente in un archivio salvataggi permanenti. L'utente deve specificare il tipo di comando, l'ID istanza e la stringa di collegamento dell'archivio salvataggi permanenti.
Applicazione di esempio InstanceQuery
L'applicazione di esempio InstanceQuery illustra la funzionalità e l'API del provider di query di AppFabric. Il provider di query consente all'utente di eseguire tre tipi di query per:
Ottenere un elenco delle istanze presenti in un archivio salvataggi permanenti con proprietà corrispondenti alla query. Questa query restituisce una matrice di oggetti instanceInfo.
Ottenere il numero di istanze presenti in un archivio salvataggi permanenti con proprietà corrispondenti alla query. Questa query restituisce un valore int32.
Ottenere il numero di istanze presenti in un archivio salvataggi permanenti con proprietà corrispondenti alla query e raggrupparle in base alle categorie definite. Questa query restituisce un valore enumerabile di tipo groupingResult.
Per ciascun tipo di query, il relativo provider fornisce un'API asincrona che esegue la query. Il tipo di input e il tipo restituito variano a seconda del tipo di query. Per tutti i tipi di query, l'utente può specificare un insieme di filtri query. Nell'esempio vengono impostati tutti su null, il che significa che la query seleziona tutte le istanze presenti nell'archivio. Oltre ai parametri di filtro query, l'utente deve specificare la stringa di collegamento dell'archivio salvataggi permanenti. Nell'esempio si presuppone che le istanze si trovino nell'archivio DefaultSqlWorkflowInstanceStore e che il database utilizzi la sicurezza integrata di Windows per l'autenticazione dell'accesso al database.
Per richiedere un elenco di istanze, l'utente deve specificare il numero massimo di istanze restituite e il modo in cui le istanze devono essere ordinate. Attualmente, il provider di query consente di eseguire l'ordinamento solo in base al valore LastUpdatedTime. In alternativa, è possibile restituire un elenco non ordinato.
Per richiedere una serie di istanze raggruppate, l'utente deve specificare i parametri di raggruppamento. I parametri vengono forniti come List<GroupingMode>. Il primo elemento definisce il gruppo principale e ciascun elemento successivo definisce un sottogruppo.
Applicazione di esempio InstanceControl
L'applicazione di esempio InstanceControl illustra la funzionalità e l'API del provider di controllo di AppFabric. Il provider di controllo consente all'utente di eseguire un comando di sospensione, ripresa, annullamento, terminazione o eliminazione su un'istanza. Oltre al tipo di comando e all'ID istanza, l'utente deve specificare gli identificatori del servizio SiteName, RelativeApplicationPath e VirtualPath. Tali parametri sono necessari affinché WMS possa calcolare l'endpoint di controllo dell'istanza del servizio. Gli identificatori del servizio sono necessari solo per i comandi di sospensione, ripresa, annullamento e terminazione. Il comando di eliminazione non viene eseguito sull'endpoint di controllo. Viene invece direttamente eseguito nel database.
Oltre ai parametri di filtro query, l'utente deve specificare la stringa di collegamento dell'archivio salvataggi permanenti. Nell'esempio si presuppone che le istanze si trovino nell'archivio DefaultSqlWorkflowInstanceStore e che il database utilizzi la sicurezza integrata di Windows per l'autenticazione dell'accesso al database.
Si noti che l'applicazione di esempio InstanceControl inserisce qualsiasi comando di sospensione, ripresa, annullamento o terminazione nella relativa coda dell'archivio salvataggi permanenti. Il comando viene eseguito in un momento successivo. Utilizzare l'applicazione di esempio InstanceQuery per verificare se e quando il comando è stato eseguito.
Si noti che è possibile inserire un comando di un'istanza nella coda solo se nella coda non sono in sospeso altri comandi per tale istanza.
Nella tabella riportata di seguito viene descritto l'effetto dei comandi eseguiti sulle istanze in diversi stati.
Stato corrente | Sospendi | Riprendi | Annulla | Termina | Elimina |
---|---|---|---|---|---|
In esecuzione |
Sospende l'istanza |
Nessuna operazione |
Annulla l'istanza |
Termina l'istanza |
Rimuove l'istanza dall'archivio salvataggi permanenti |
Sospeso |
Nessuna operazione |
Riprende l'istanza |
Annulla l'istanza |
Termina l'istanza |
Rimuove l'istanza dall'archivio salvataggi permanenti |
Completato |
Non consentito |
Non consentito |
Non consentito |
Non consentito |
Rimuove l'istanza dall'archivio salvataggi permanenti |
Avviso
La rimozione di istanze in esecuzione dall'archivio salvataggi permanenti può comportare risultati imprevisti e non è consigliata.
2011-12-05