Der aktuelle Benutzer ändert sich im Webservice nicht, nachdem sich ein anderer Benutzer angemeldet hat

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

Frage

Der Kontext: Ich habe diesen Webdienst in SharePoint gehostet.

[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;
  }
}

Die entsprechende Servicedatei UserService.svc ist dem ISAPI-Ordner zugeordnet und sieht folgendermaßen aus:

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

Ich rufe den Webdienst von einer SharePoint-Seite über JavaScript-Code auf.

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

Die URL ist nur zu Demozwecken fest codiert.

Das Problem: Angenommen, Benutzer A ist derjenige, der die JavaScript-Funktion zuerst aufgerufen hat.Dann gibt der Dienst seinen Benutzernamen zurück.Meldet sich anschließend jemand anderes bei SharePoint an und ruft den Webdienst auf, erhält er den Benutzernamen von Benutzer A.Wenn der IE geschlossen und neu gestartet wird und der Benutzer C derjenige ist, der den Webdienst zuerst aufgerufen hat, wird immer sein Benutzername zurückgegeben.Es spielt keine Rolle, ob sich Benutzer A oder Benutzer B bei SharPoint anmeldet.Irgendwie wird der Benutzer, der den Webdienst zuerst aufgerufen hat, entweder vom Webdienst oder vom JavaScript-Code zwischengespeichert.

Was muss ich tun, damit der Webservice den richtigen Benutzernamen zurückgibt?

War es hilfreich?

Lösung

Es könnte daran liegen, dass der Browser die Antwort Ihrer AJAX-Anfrage zwischenspeichert, IE liebt das zum Beispiel.Versuchen Sie Folgendes hinzuzufügen: cache:false zur AJAX-Anfrage:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top