Domanda

Sono bloccato con un problema qui che mi lascia stupefatto. Sto scrivendo un HttpModule che esamina l'URL di tutte le richieste HTTP per effettuare il login gli utenti che hanno scaricato ogni documento in una raccolta documenti. Tutto funziona come dovrebbe, quando collegati alla macchina server. Tuttavia, quando si accede da un altro computer in rete, sembra che di tanto in tanto, HTTP non viene utilizzato affatto.

Logging tutte le richieste HTTP, quando l'accesso al server ottengo una richiesta per l'URL come http: // portale .customer.local / reports / Reportslib / xsht2.xlsx ogni volta che il download di un documento. Durante la visualizzazione dei documenti da un altro computer della rete, di solito appare questa richiesta. Durante la visualizzazione di un documento di Office, tuttavia, v'è a volte una richiesta di http: //portal.customer.local/ rapporti / _vti_bin / cellstorage.svc / cellstorageservicentlm . Ho pensato che questo potrebbe essere una sorta di funzione di servizio, e abbastanza sicuro, in sede di esame l'intestazione di questa richiesta, trovo il campo

SOAPAction=%22http%3a%2f%2fschemas.microsoft.com%2fsharepoint%2fsoap%2fICellStorages%2fExecuteCellStorageRequest%22

Quindi immagino che il sapone è in qualche modo utilizzato per retreive il documento, forse se è stato memorizzato nella cache da qualche parte o c'è qualche legame speciale con l'applicazione di Office in questione.

Così, in due parti domanda:

(1) Qualcuno ha un'idea che cosa sta realmente succedendo qui? Esiste un modo di lavorare intorno ad esso?

(2) Ci ha avuto modo di essere un modo più semplice per fare questo. Il mio obiettivo è solo quello di registrare il nome del documento e il nome utente ogni volta che un documento è stato scaricato. C'è qualcosa che mi si affaccia?

class FileDownloadedEvent : IHttpModule
{
    public void Init(HttpApplication context)
    {
        // Register event handler to be called after every page request
        context.PostAuthenticateRequest += ContextPostAuthenticateRequest;
    }

    static void ContextPostAuthenticateRequest(object sender, EventArgs e)
    {
        var app = sender as HttpApplication;
        if (app != null)
        {

            string requesturl = app.Request.Url.ToString();


                    // Inspect request url to see whether it's a request to download a document from the document library
                    if (requesturl.StartsWith(Utils.reportsLibraryUrl) && (!requesturl.Contains(".aspx")) && (!requesturl.EndsWith("/")))
                    {
                        SPWeb web = SPContext.Current.Web;

                        String fileName = requesturl.Substring(Utils.reportsLibraryUrl.Length);

                        // Call event handler action to register downloaded document
                        web.AllowUnsafeUpdates = true;
                        EventHandlerActions.documentDownloaded(web, requesturl, fileName);
                        web.AllowUnsafeUpdates = false;
            } 
        }
    }


    public void Dispose() { }

}
È stato utile?

Soluzione

Si potrebbe consentire di revisione sul 'Visualizza' eventi della SPListItem. È quindi possibile interrogazione con qualcosa di simile:

SPSite site = ...
SPListItem item = ...
SPAuditQuery query = new SPAuditQuery(site);
query.RestrictToListItem(item);
SPAuditEventType[] eventTypes = new SPAuditEventType[] { SPAuditEventType.View };
SPAuditEntryCollection auditLog = site.Audit.GetEntries(query);

Altri suggerimenti

Sembra che si stanno reinventando la ruota. navi di SharePoint con un'infrastruttura di Revisione, che anche se viziato, probabilmente vi darà quello che ti serve.

Date un'occhiata al seguente:

  1. Quando si utilizza WSS3 o SharePoint Foundation non si ottiene un'interfaccia utente in modo avrete bisogno di per set e di query a livello di codice . (2007 articolo, ma funziona lo stesso nel 2010)
  2. Utilizzo MOSS 2007 o SharePoint Server 2010 si ottiene alcune costruito in funzione . Segnalazione può essere un po 'buggy però.
  3. Sostuisci componente di terze parti che fa tutto per voi , indipendentemente dal tuo ambiente SharePoint e senza tutti i bug.

Si prega di notare che il link al 3 punti componente parte di un prodotto ho lavorato in modo da applicare le solite esclusioni di responsabilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top