Текущий пользователь не меняется в веб-сервисе после входа в систему другого пользователя

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/76243

Вопрос

Контекст: У меня есть этот веб-сервис, размещенный в SharePoint.

[ServiceContract]
public interface IUserService
{
  [WebInvoke(UriTemplate = "/GetCurrentUser", Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
  [OperationContract]
  string GetCurrentUser();
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class UserService: IUserService
{
  public string GetCurrentUser()
  {
    return SPContext.Current.Web.CurrentUser.LoginName;
  }
}

Соответствующий служебный файл UserService.svc сопоставлен с папкой ISAPI и выглядит следующим образом:

<%@ ServiceHost Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                Language="C#" Debug="true"
                Service="UserService, $SharePoint.Project.AssemblyFullName$" %>

Я вызываю веб-службу со страницы SharePoint с помощью кода JavaScript.

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}

URL-адрес жестко запрограммирован только для демонстрационных целей.

Проблема: Предположим, что пользователь А — это тот, кто первым вызвал функцию JavaScript.Затем сервис возвращает его имя пользователя.Если после этого кто-нибудь еще войдет в SharePoint и вызовет веб-службу, он получит имя пользователя пользователя А.Если IE закрыт и запущен заново, и если пользователь C — это тот, кто первым вызвал веб-службу, то его имя пользователя всегда возвращается.Не имеет значения, входит ли пользователь A или пользователь B в SharPoint.Каким-то образом пользователь, который первым вызвал веб-службу, кэшируется либо веб-службой, либо фрагментом кода JavaScript.

Что мне нужно сделать, чтобы веб-служба возвращала правильное имя пользователя?

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

Решение

Это может быть связано с тем, что браузер кэширует ответ на ваш запрос AJAX, например, IE любит это.Попробуйте добавить: cache:false на запрос AJAX:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top