2 pagine in totale: <<Indietro 1 [2]
Ricavare informazioni sui cataloghi
Se abbiamo un database di grosse dimensioni, avviando il Popolamento dell'indice, la risposta del server è immediata che ci informa se l'esito ha avuto successo, anche se può durare anche qualche minuto.
Come possiamo sapere in che stato è il popolamento oppure ricavare le dimensioni del catalogo o altre informazioni?
A questi quesiti ci viene in aiuto la sp FULLTEXTCATALOGPROPERTY la quale ci fornisce molte informazioni. Accetta due Parametri, il primo è il nome del catalogo di cui vogliamo sapere le informazioni, il Secondo l'informazione richiesta. Restituisce un solo valore di tipo int.
FULLTEXTCATALOGPROPERTY( catalog_name , property ) Proprietà | Descrizione |
PopulateStatus | 0 = inattivo |
ItemCount | Numero delle voci indicizzate incluse nel catalogo full-text. |
IndexSize | Dimensione dell'indice full-text in megabyte. |
UniqueKeyCount | Numero di parole univoche (chiavi) che costituiscono l'indice full-text del catalogo. Corrisponde al numero approssimato delle parole significative archiviate nel catalogo full-text. |
LogSize | Dimensioni in byte del set completo dei log degli errori associati a un catalogo full-text del servizio Microsoft® Search. |
PopulateCompletionAge | Differenza espressa in secondi tra il completamento dell'ultimo popolamento di indici full-text e la data 01/01/1990 00:00:00. |
Vediamo come usare tale questa stored procedure, sempre con un Web Service:
Creiamo una classe alla quale memorizziamo le informazioni richieste:
#Region "Classe per recuperare le informazioni dal catalogo Full Text"
<Serializable()> _
Public Class CatalogProperty
Enum Status
inattivo = 0 'Idle
PopulationInProgress = 1 ' Full population in progress
in_Pausa = 2 ' Paused
In_Rallentato = 3 ' Throttled
In_Recupero = 4 ' Recovering
In_Arresto = 5 ' Shutdown
IncrementaleInCorso = 6 ' Incremental population in progress
CreazioneIndice = 7 ' Building index
DiskIsFullPaused = 8 ' Disk is full. Paused.
RilevamentoModifiche = 9 ' Change tracking
End Enum
Private _PopulateStatus As Status
Public Property PopulateStatus() As Status
Get
Return _PopulateStatus
End Get
Set(ByVal Value As Status)
_PopulateStatus = Value
End Set
End Property
Private _ItemCount As System.Int32
Public Property ItemCount() As Int32
Get
Return _ItemCount
End Get
Set(ByVal Value As Int32)
_ItemCount = Value
End Set
End Property
' continua - vedi allegato
'Un oggetto Enum da passare come argomento alla chiamata del Web Service per capire qualle azione è stata richiesta.
<Serializable()> _
Enum Operazione
PopulateStatus = 1
ItemCount = 2
IndexSize = 3
UniqueKeyCount = 4
LogSize = 5
PopulateCompletionAge = 6
FullInfoStatus = 7
End Enum Il metodo del Web Service accetta due argomenti: il nome del catalogo da cui vogliamo le informazioni e l'azione da compiere, che è una delle 6 descritte.
Ho usato la reflection per rendere il codice più compatto, ma nessuno vi impedisce di esplicitare ogni singola operazione per impostare in valore di CatalogProperty.
<WebMethod(Description:="Ritornano le informazioni dal Catalogo Full Text")> _
Public Function InfoCatalagoFullText(ByVal Catalog_Descrizione As String, ByVal Action As Operazione) As CatalogProperty
Dim Cnn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("SqlConnectionString"))
Dim SqlInfo As String = "SELECT fulltextcatalogproperty(@Cat_Desc, @Action)"
Dim Proprieta As New CatalogProperty()
Try
If Action = Operazione.FullInfoStatus Then
Dim i As System.Int16
Dim myType As Type = Proprieta.GetType
Dim myPropertyInfo As PropertyInfo() = myType.GetProperties((BindingFlags.Public Or BindingFlags.Instance))
For i = 0 To myType.GetProperties.Length - 1
Dim Cmd As New SqlCommand(SqlInfo, Cnn)
Dim NomeProprieta As String = myPropertyInfo(i).Name
Cmd.Parameters.Add("@Action", SqlDbType.NVarChar).Value = NomeProprieta
Cmd.Parameters.Add("@Cat_Desc", SqlDbType.NVarChar).Value = Catalog_Descrizione
Cnn.Open()
Dim Result As System.Int32 = CType(Cmd.ExecuteScalar, System.Int32)
Cmd.Dispose()
Cnn.Close()
If NomeProprieta = "PopulateStatus" Then
myPropertyInfo(i).SetValue(Proprieta, CType(Result, CatalogProperty.Status), Nothing)
Else
myPropertyInfo(i).SetValue(Proprieta, Result, Nothing)
End If
Next
Else
Dim Cmd As New SqlCommand(SqlInfo, Cnn)
Cmd.Parameters.Add("@Cat_Desc", SqlDbType.NVarChar).Value = Catalog_Descrizione
Cmd.Parameters.Add("@Action", SqlDbType.NVarChar).Value = Action.ToString("g")
Cnn.Open()
Dim Result As System.Int32 = CType(Cmd.ExecuteScalar, System.Int32)
Cmd.Dispose()
Cnn.Close()
Dim Prop As PropertyInfo = Proprieta.GetType.GetProperty(Action.ToString("g"), BindingFlags.Public Or BindingFlags.Instance)
If Action.ToString("g") = "PopulateStatus" Then
Prop.SetValue(Proprieta, CType(Result, CatalogProperty.Status), Nothing)
Else
Prop.SetValue(Proprieta, Result, Nothing)
End If
End If
Return Proprieta
Catch e As SqlException
Console.WriteLine("Errore: {0}", e.Message)
Console.WriteLine("Causato da {0}.", e.Source)
Console.WriteLine("Nessun record scritto nel database.")
Throw New ApplicationException( _
"Errore nella richiesta di informazioni al Catalogo")
Catch e As Exception
Throw New ApplicationException( _
"Errore nella richiesta di informazioni al Catalogo")
Console.WriteLine("Error: {0}", e.Message)
Console.WriteLine("Error reported by {0}.", e.Source)
Console.WriteLine("Errore nella richiesta di informazioni al Catalogo.")
Finally
Cnn.Close()
End Try
End FunctionIl client
Allegato al progetto c'è un client, che punta al web service appena creato, per permettere l'amministrazione remota dei cataloghi.
E' sufficiente aprire la soluzione con VS.NET per poter procedere alla modifica.


Conclusioni
Sfruttando il progetto allegato è possibile dunque creare una serie di web service di servizio, che, se adeguatamente protetti, possono permettervi di interagire con i cataloghi full-text anche da remoto, con la piena libertà che l'accesso ad Enterprise Manager potrebbe garantirvi.
Approfondimenti
2 pagine in totale: <<Indietro 1 [2]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!