Frage

Ich bin hier mit einem Problem festgefahren, das mich verblüfft lässt. Ich schreibe ein HTTPModule, das die URL aller HTTP -Anfragen untersucht, um sich zu protokollieren, die Benutzer jedes Dokument in einer Dokumentbibliothek heruntergeladen haben. Alles funktioniert so, wie es sollte, wenn sie sich in der Servermaschine angemeldet haben. Wenn sie jedoch von einem anderen Computer im Netzwerk angemeldet sind, scheint es, dass HTTP gelegentlich überhaupt nicht verwendet wird.

Protokollieren Sie alle HTTP -Anforderungen, wenn Sie sich in den Server angemeldet haben http: //portal.customer.local/reports/reportslib/xsht2.xlsx Beim Herunterladen eines Dokuments. Beim Anzeigen der Dokumente von einem anderen Computer im Netzwerk wird diese Anfrage normalerweise angezeigt. Beim Anzeigen eines Bürodokuments gibt es jedoch manchmal eine Anfrage für http: //portal.customer.local/reports/_vti_bin/cellstorage.svc/cellstorageServicentlm stattdessen. Ich dachte

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

Ich vermute also, dass Seife irgendwie verwendet wird, um das Dokument zurückzusetzen.

Also zweiteilige Frage:

(1) Hat jemand eine Idee, was hier wirklich los ist? Gibt es eine Möglichkeit, um daran zu arbeiten?

(2) Es muss eine einfachere Möglichkeit geben, dies zu tun. Mein Ziel ist es nur, den Dokumentnamen und den Benutzernamen zu protokollieren, wenn ein Dokument heruntergeladen wurde. Gibt es etwas, das ich übersieht?

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() { }

}
War es hilfreich?

Lösung

Sie können Audit über die "Sichtweise" -Ereignisse des Splistitems aktivieren. Sie können dann Anfrage mit so etwas wie:

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

Andere Tipps

Es hört sich so an, als würden Sie das Rad neu erfinden. SharePoint -Schiffe mit einer Prüfungsinfrastruktur, die Ihnen, obwohl er fehlerhaft ist, wahrscheinlich das geben, was Sie brauchen.

Schauen Sie sich Folgendes an:

  1. Wenn Sie WSS3 oder SharePoint Foundation verwenden, erhalten Sie keine Benutzeroberfläche, sodass Sie benötigen es programmatisch festlegen und abfragen. (Artikel 2007, aber es funktioniert 2010 gleich)
  2. Verwenden von Moss 2007 oder SharePoint Server 2010 Sie erhalten einige integrierte Funktionen. Die Berichterstattung kann jedoch etwas fehlerhaft sein.
  3. Holen Sie sich eine Drittanbieterkomponente Das macht alles für Sie, unabhängig von Ihrer SharePoint -Umgebung und ohne alle Fehler.

Bitte beachten Sie, dass der Link zur Drittanbieterkomponente auf ein Produkt zeigt, an dem ich gearbeitet habe, damit die üblichen Haftungsausschlüsse gelten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top