Domanda

Il contesto: Ho questo servizio Web ospitato in 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;
  }
}
.

Il file di servizio corrispondente UserService.svc è mappato sulla cartella ISAPI e sembra questo:

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

Sto chiamando il servizio Web da una pagina di SharePoint tramite codice JavaScript.

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

L'URL è codificato rigido solo per scopi demo.

Il problema: Supponiamo che l'utente A è colui che ha prima invocato la funzione JavaScript. Quindi il servizio restituisce il suo nome utente. Se dopo qualcun altro firma a SharePoint e chiama il servizio Web, allora otterrà il nome utente dell'utente. Se IE è chiuso e avviato nuovo e se l'utente c è colui che ha prima chiamato il servizio Web, il suo nome utente è sempre restituito. Non importa se l'utente A o l'utente B segni a Sharpoint. È somwhe che l'utente che ha chiamato il servizio web è memorizzato nella cache del servizio Web o del pezzo di codice JavaScript.

Cosa devo fare in modo che il servizio web restituisca il nome utente giusto?

È stato utile?

Soluzione

It could be due to the browser caching the response of your AJAX request, IE loves this for example. Try adding: cache:false to the AJAX request:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top