Pergunta

O contexto: Eu tenho esse serviço web hospedado no 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;
  }
}

O arquivo de serviço correspondente UserService.svc é mapeado para a pasta ISAPI e tem esta aparência:

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

Estou chamando o serviço web de uma página do SharePoint por meio de código JavaScript.

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

O URL é codificado apenas para fins de demonstração.

O problema: Suponha que o usuário A seja aquele que primeiro invocou a função JavaScript.Então o serviço retorna seu nome de usuário.Se depois alguém entrar no SharePoint e ligar para o serviço Web, ele receberá o nome de usuário do usuário A.Se o IE for fechado e iniciado de novo e se o usuário C for quem primeiro chamou o serviço da web, seu nome de usuário será sempre retornado.Não importa se o usuário A ou o usuário B entra no SharPoint.De alguma forma, o usuário que primeiro chamou o serviço da web é armazenado em cache pelo serviço da web ou pelo trecho de código JavaScript.

O que devo fazer para que o serviço web retorne o nome de usuário correto?

Foi útil?

Solução

Pode ser devido ao navegador armazenar em cache a resposta da sua solicitação AJAX, o IE adora isso, por exemplo.Tente adicionar: cache:false para a solicitação AJAX:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top