Informazioni sui gestori di protocolli

Alcune applicazioni archiviano gli elementi nei database o nei tipi di file personalizzati. Anche se Windows Search può indicizzare il nome e le proprietà del file, Windows non conosce il contenuto del file. Di conseguenza, tali elementi non possono essere indicizzati o esposti nella shell di Windows. Creando un gestore di protocollo è possibile rendere questi elementi disponibili per l'indicizzazione. È anche possibile indicizzare un formato di file composto, ad esempio un file ZIP.

Questo argomento è organizzato come segue:

Indicizzazione di archivi dati con gestori di protocollo

Quando gli utenti devono cercare database legacy, archivi di posta elettronica o altre strutture di dati non supportate da Windows Search, è necessario innanzitutto determinare se esiste già un gestore di protocolli per tale archivio dati, ad esempio per l'uso con un'altra applicazione, ad esempio SharePoint Server. In tal caso, è possibile installare tale gestore di protocollo nel sistema. I gestori di protocollo di Windows Search usano specifiche di progettazione simili a SharePoint Server e spesso possono essere usate in modo intercambiabile.

Per altre informazioni sulla distribuzione di Search Server 2008 con Office SharePoint Server 2007, vedere Ricerca federata [Search Server 2008].

Archivi dati della shell

Prima che uno sviluppatore di terze parti di nuovi formati di file e archivi dati possa ottenere tali formati e archivi da visualizzare nei risultati delle query in Esplora risorse, lo sviluppatore deve implementare un'origine dati Shell. Un'origine dati shell è un componente usato per estendere lo spazio dei nomi shell ed esporre elementi in un archivio dati. Un archivio dati è un repository di dati. Un archivio dati può essere esposto al modello di programmazione shell come contenitore che usa un'origine dati Shell. Gli elementi in un archivio dati possono essere indicizzati dal sistema di Windows Search usando un gestore di protocolli. Il gestore del protocollo implementa il protocollo per l'accesso a un'origine contenuto nel formato nativo. Le interfacce ISearchProtocol e ISearchProtocol2 vengono usate per implementare un gestore di protocollo personalizzato per espandere le origini dati che è possibile indicizzare.

Se si desidera che i risultati della query vengano visualizzati in Esplora risorse, è necessario implementare un'origine dati shell prima di poter creare un gestore di protocollo per estendere l'indice. Tuttavia, se tutte le query saranno a livello di codice (ad esempio tramite OLE DB) e interpretate dal codice dell'applicazione anziché dalla shell, uno spazio dei nomi shell pur mantenendo la preferenza non è strettamente obbligatorio.

Nota

Un'origine dati shell è talvolta nota come estensione dello spazio dei nomi shell. Un gestore è talvolta noto come estensione shell o gestore di estensioni shell.

 

Se si desidera che gli utenti visualizzino i risultati della ricerca da Esplora risorse, è necessario creare un gestore di protocollo e uno o più dei componenti aggiuntivi seguenti:

  • Gestore del menu di scelta rapida
  • Gestore icone
  • Altri tipi di gestore di file

Per un elenco dei gestori identificati dallo scenario di sviluppo che si sta tentando di ottenere, vedere "Panoramica dei gestori" in Windows Search come piattaforma di sviluppo. Per informazioni sulla creazione di gestori, vedere Registrazione di estensioni shell, menu di scelta rapida e gestori dei tipi di file.

Gestori del protocollo

Se l'archivio dati è anche un contenitore, ad esempio una cartella del file system, è necessario implementare un filtro per enumerare gli URL nel contenitore. Se l'archivio dati contiene tipi di dati o di file diversi da uno dei 200 tipi di file supportati da Windows Search, è necessario implementare un filtro per accedere e indicizzare il contenuto degli elementi nell'archivio. Windows Search usa il gestore di protocolli e la tecnologia IFilter simili a quella usata da SharePoint Server. Se si dispone già di filtri per un archivio e un tipo di file specifici installati nel sistema in fase di indicizzazione, Windows Search potrebbe essere in grado di usare le interfacce esistenti per indicizzare questi dati.

Per una panoramica del processo di indicizzazione, vedere Processo di indicizzazione. Per informazioni concettuali sui gestori di filtro, vedere Sviluppo di gestori di filtri.

Filtri e gestori di protocollo

I gestori di protocollo consentono all'indicizzatore di Windows Search di accedere agli archivi dati, consentendo all'indicizzatore di eseguire la ricerca per indicizzazione dei nodi di un archivio dati ed estrarre le informazioni pertinenti per l'indice. Windows Search, ad esempio, viene fornito con gestori di protocollo per gli archivi di file system e per alcune versioni di entrambi gli archivi dati di Microsoft Outlook. Durante l'indicizzazione della posta elettronica di Outlook, il gestore del protocollo esegue la ricerca per indicizzazione di tutti i messaggi in un set di cartelle di Outlook ed estrae informazioni da ogni messaggio e allegato. Queste informazioni vengono passate all'indicizzatore per l'inclusione nel catalogo di Windows Search.

Per informazioni generali su Gestione cataloghi e Gestione ambiti ricerca per indicizzazione, vedere Uso di Gestione cataloghi e Utilizzo di Gestione ambiti ricerca per indicizzazione.

Indicizzazione di un formato di file composto

È possibile indicizzare un formato di file composto in modo che i singoli elementi del file possano essere restituiti come singoli risultati. Un formato di file composto, ad esempio un file compresso con estensione zip, è essenzialmente un archivio dati e può essere considerato come tale a scopo di indicizzazione. Nell'esempio seguente viene visualizzato un file ZIP nello spazio dei nomi del file system (FILE://c:/test/test.zip) in cui sono presenti sia sottocartelle che singoli elementi.

Test.zip 

    |-folder1 

    |    |-folder2 

    |           |- FileX.txt 

    |- FileY.doc

Il gestore del protocollo FILE individua quando FILE://c:/test/test.zip modifiche monitorando i log delle modifiche del file system e richiamerà un IFilter registrato per i file ZIP in tale file quando il file viene modificato, ma non ha alcuna conoscenza della struttura interna del file ZIP stesso.

È necessario informare l'indicizzatore che il formato di file composto è un archivio dati. È necessario eseguire questa operazione per indicizzare e recuperare singoli elementi come entità univoche. Dopo aver implementato un'origine dati shell ed eseguito i passaggi seguenti, si avrà un gestore di protocollo in grado di elaborare ed esporre i dati da un formato di file composto (un file ZIP) come singoli elementi.

Per informare l'indicizzatore che un file composto è un archivio dati:

  1. Creare un gestore di protocollo (usando ISearchProtocol o ISearchProtocol2) per i file ZIP che hanno la possibilità di eseguire l'associazione al file di origine. Per altre informazioni, vedere Installazione e registrazione dei gestori di protocollo.

    Ad esempio, è possibile usare un percorso di escape per il file zip come nome della cartella radice e quindi usare una sintassi della gerarchia come qualsiasi altro formato di file.

    .zip:///escapedPathTo.zipFile/.zipfolder/.../.zipfile
    

    Usando i dati di esempio precedenti per c:\test\test.zip, gli URL univoci saranno i seguenti. Con questi URL, il gestore del protocollo contiene le informazioni necessarie per eseguire l'associazione al file con estensione zip ed enumerare gli URL figlio, inclusi i file interni, in modo che possano essere associati e indicizzati dai filtri .doc e txt.

    
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/FileY.Doc 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2/FileX.txt
    
  2. Assicurarsi che il gestore del protocollo soddisfi le due condizioni seguenti:

    • Gli URL radice per un file ZIP devono generare PKEY_Search_IsClosedDirectory (System.Search.IsClosedDirectory) negli URL che sono gli URL del file ZIP radice. Ad esempio, .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ deve generare IsClosedDirectory = TRUE. Ciò indica all'indicizzatore che, se la data in questo URL non è stata modificata, non è necessario elaborare alcun URL figlio.
    • Ogni URL figlio per tale URL deve generare PKEY_Search_IsFullyContained (System.Search.IsFullyContained) negli URL figlio dell'URL con estensione zip radice. In genere alla fine di una ricerca per indicizzazione incrementale, l'indicizzatore considera tutti gli URL non visualizzati come elementi che devono essere eliminati. Ma il file con estensione zip radice non deve elaborare gli URL radice perché non è stato modificato nulla. L'emissione di questa proprietà come TRUE indica all'indicizzatore che, se questo URL non è stato elaborato alla fine di una ricerca per indicizzazione incrementale, non deve essere eliminato. Verrà eliminato solo se l'elemento radice è stato modificato e non viene visitato.

Windows Search richiede una pagina iniziale per un protocollo per sapere quali URL eseguire la ricerca per indicizzazione incrementale e quali URL devono essere ignorati quando vengono trovati. Ma non è possibile iniziare con un URL per ogni file ZIP, perché non sappiamo dove si trova ogni file ZIP. Di conseguenza, l'URL della pagina iniziale del gestore del protocollo ZIP deve essere in grado di enumerare tutti gli elementi nella radice dei percorsi di escape di tutti i file ZIP. Questi file ZIP non sono necessariamente nello spazio dei nomi FILE: e potrebbero essere un URL di tipo MAPI che punta a un file ZIP come allegato, ad esempio.

Per registrare una radice come pagina iniziale:

  1. Registrare una radice, ad esempio .zip:/// come pagina iniziale, in modo che tutti i file ZIP inizino lì, in effetti. Quando si elabora l'URL con estensione zip radice, il gestore del protocollo deve generare l'elenco di URL figlio da generare eseguendo una query su Windows Search per tutti gli URL con System.FileExtension = ".zip".

  2. Eseguire l'escape di tali URL per rimuovere le barre e restituirle come URL figlio. Query di esempio per recuperare i tipi desiderati come indicato di seguito.

    SELECT system.itemurl, System.DateModified FROM SystemIndex 
    WHERE System.FileExtension='.zip' OR System.MimeType='mimetypefor.zip'
    
  3. Quando Windows Search esegue periodicamente una ricerca per indicizzazione incrementale nell'URL radice di .zip:///, è necessario riflettere l'elenco di URL che Windows Search sta già mantenendo che sono URL ZIP. Se viene individuata un'eliminazione nell'archivio nativo in cui è archiviato il file ZIP, non viene visualizzata nell'enumerazione e tale ramo dell'albero nel file ZIP viene rimosso.

  4. Per eseguire l'associazione ai dati con estensione zip per un altro gestore di protocolli, è consigliabile passare a IShellFolder per tale URL da associare all'archiviazione dell'oggetto e non presupporre che sia sempre un file. In questo modo è possibile usare allegati negli archivi di posta elettronica, ad esempio.

  5. Quando si creano URL figlio per ogni file ZIP, è consigliabile usare PKEY_Search_UrlToIndexWithModificationTime (System.Search.UrlToIndexWithModificationTime) per passare PKEY_DateModified (System.DateModified) del file ZIP effettivo in modo che l'indicizzatore esequisi il file ZIP solo se è stato modificato.

Per fare in modo che gli URL con estensione zip siano indicizzati immediatamente dopo la creazione o la modifica e non devono attendere che una ricerca per indicizzazione incrementale rilevi il nuovo stato, è possibile monitorare personalmente il file system per le modifiche del file zip. Tuttavia, tale approccio non funziona per altri archivi dati, ad esempio MAPI.

Per fare in modo che gli URL con estensione zip siano indicizzati quando vengono creati o modificati:

  1. Creare un filtro (e l'implementazione dell'interfaccia IFilter ) per il tipo di file ZIP. Per altre informazioni, vedere Sviluppo di gestori di proprietà per Windows Search.
  2. Ogni volta che viene chiamata l'implementazione di IFilter, l'URL è stato individuato o modificato. Generare quindi un evento per l'URL con estensione zip appropriato per l'URL di origine, tramite l'interfaccia IGatherNotifyInline . In questo modo è possibile indicare immediatamente all'indicizzatore che sono presenti nuovi dati da indicizzare senza dover attendere la ricerca per indicizzazione incrementale.

Sviluppo di gestori di protocolli

Installazione e registrazione dei gestori di protocollo

Notifica dell'indice delle modifiche

Aggiunta di icone e menu di scelta rapida

Esempio di codice: Estensioni della shell per gestori di protocollo

Installazione e registrazione dei gestori di protocollo

Creazione di un Connessione or di ricerca per un gestore del protocollo

Debug dei gestori del protocollo