Вопрос

Я застрял здесь с проблемой, которая оставляет меня ошеломленным. Я пишу HTTPModule, который проверяет URL -адрес всех HTTP -запросов, чтобы войти в систему, какой пользователи загружают каждый документ в библиотеке документов. Все работает так, как должно войти в машину сервера. Однако при входе в систему с другой машины в сети кажется, что иногда HTTP вообще не используется.

Восхождение на все HTTP -запросы при входе на сервер я получаю запрос на URL -адрес http: //portal.customer.local/reports/reportslib/xsht2.xlsx Всякий раз, когда загрузка документа. При просмотре документов с другого компьютера в сети обычно появляется этот запрос. Однако при просмотре офисного документа иногда возникает запрос http: //portal.customer.local/reports/_vti_bin/cellstorage.svc/cellstorageservicentlm вместо. Я подумал, что это может быть какая -то функция обслуживания, и, конечно же, при изучении заголовка этого запроса я нахожу поле

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

Поэтому я предполагаю, что SOAP каким -то образом привыкает к возвращению документа, возможно, если оно было где -то кэшировано или есть какое -то особое соединение с участием офисного приложения.

Итак, вопрос с двумя частями:

(1) У кого -нибудь есть идея, что здесь на самом деле происходит? Есть ли способ обойти это?

(2) Должен быть какой -то более простой способ сделать это. Моя цель - просто регистрировать имя документа и имя пользователя всякий раз, когда был загружен документ. Есть что -то, что я упускаю из виду?

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

}
Это было полезно?

Решение

Вы можете включить аудит на «Просмотр» событий Splistitem. Тогда вы можете запрос с чем -то вроде:

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

Другие советы

Похоже, вы изобретаете колесо. SharePoint поставляется с инфраструктурой аудита, которая, несмотря на недостаток, вероятно, даст вам то, что вам нужно.

Посмотрите на следующее:

  1. При использовании WSS3 или SharePoint Foundation вы не получите пользовательский интерфейс, поэтому вам понадобится установить и запросить его программно. Анкет (Статья 2007 года, но она работает так же в 2010 году)
  2. Использование Moss 2007 или SharePoint Server 2010 Вы получаете встроенную функциональность. Анкет Репортаж может быть немного глюкой, хотя.
  3. Получите сторонний компонент Это делает все это для вас, независимо от вашей среды SharePoint и без всех ошибок.

Обратите внимание, что ссылка на сторонний компонент указывает на продукт, над которым я работал, поэтому применяются обычные отказы от ответственности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top