L'utilisateur actuel ne change pas dans le service Web après la connexion d'un autre utilisateur

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

Question

Le contexte: J'ai ce service Web hébergé dans 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;
  }
}

Le fichier de service correspondant UserService.svc est mappé au dossier ISAPI et ressemble à ceci :

<%@ 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$" %>

J'appelle le service Web à partir d'une page SharePoint via du code JavaScript.

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

L'URL est codée en dur à des fins de démonstration uniquement.

Le problème: Supposons que l'utilisateur A soit celui qui a invoqué en premier la fonction JavaScript.Ensuite, le service renvoie son nom d'utilisateur.Si par la suite quelqu'un d'autre se connecte à SharePoint et appelle le service Web, il obtiendra le nom d'utilisateur de l'utilisateur A.Si IE est fermé et redémarré et si l'utilisateur C est celui qui a appelé en premier le service web alors son nom d'utilisateur est toujours renvoyé.Peu importe que l'utilisateur A ou l'utilisateur B se connecte à SharPoint.Il se trouve que l'utilisateur qui a appelé le service Web en premier est mis en cache soit par le service Web, soit par le morceau de code JavaScript.

Que dois-je faire pour que le service Web renvoie le bon nom d'utilisateur ?

Était-ce utile?

La solution

Cela pourrait être dû au fait que le navigateur met en cache la réponse de votre requête AJAX, IE adore cela par exemple.Essayez d'ajouter : cache:false à la requête AJAX :

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top