Pregunta

El contexto: Tengo este servicio web alojado en 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;
  }
}

El expediente de servicio correspondiente. UserService.svc está asignado a la carpeta ISAPI y tiene este aspecto:

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

Estoy llamando al servicio web desde una página de SharePoint mediante código JavaScript.

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

La URL está codificada únicamente con fines de demostración.

El problema: Supongamos que el usuario A es el que invocó por primera vez la función JavaScript.Luego el servicio le devuelve su nombre de usuario.Si luego alguien más inicia sesión en SharePoint y llama al servicio web, obtendrá el nombre de usuario del Usuario A.Si IE se cierra y se inicia de nuevo y si el usuario C es el que llamó por primera vez al servicio web, siempre se devuelve su nombre de usuario.No importa si el usuario A o el usuario B inician sesión en SharPoint.De alguna manera, el usuario que llamó por primera vez al servicio web se almacena en caché mediante el servicio web o el código JavaScript.

¿Qué tengo que hacer para que el servicio web me devuelva el nombre de usuario correcto?

¿Fue útil?

Solución

Podría deberse a que el navegador almacena en caché la respuesta de su solicitud AJAX; a IE le encanta esto, por ejemplo.Intente agregar: cache:false a la solicitud AJAX:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Licenciado bajo: CC-BY-SA con atribución
scroll top