لا يتغير المستخدم الحالي في خدمة الويب بعد تسجيل دخول مستخدم آخر

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

سؤال

السياق: لدي خدمة الويب هذه مستضافة في 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;
  }
}

ملف الخدمة المقابل UserService.svc تم تعيينه إلى مجلد ISAPI ويبدو كما يلي:

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

أقوم بالاتصال بخدمة الويب من صفحة SharePoint عبر كود JavaScript.

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

عنوان URL مشفر بشكل ثابت للأغراض التجريبية فقط.

المشكلة: لنفترض أن المستخدم "أ" هو الذي قام باستدعاء وظيفة JavaScript لأول مرة.ثم تقوم الخدمة بإرجاع اسم المستخدم الخاص به.إذا قام أي شخص آخر بعد ذلك بتسجيل الدخول إلى SharePoint واتصل بخدمة الويب، فسيحصل على اسم المستخدم الخاص بالمستخدم أ.إذا تم إغلاق IE وبدأ من جديد وإذا كان المستخدم C هو الذي اتصل بخدمة الويب أولاً، فسيتم إرجاع اسم المستخدم الخاص به دائمًا.لا يهم ما إذا كان المستخدم أ أو المستخدم ب قد قام بتسجيل الدخول إلى SharePoint.من المثير للاهتمام أن المستخدم الذي اتصل بخدمة الويب لأول مرة يتم تخزينه مؤقتًا إما عن طريق خدمة الويب أو جزء كود JavaScript.

ما الذي يجب علي فعله حتى تقوم خدمة الويب بإرجاع اسم المستخدم الصحيح؟

هل كانت مفيدة؟

المحلول

قد يكون ذلك بسبب قيام المتصفح بالتخزين المؤقت لاستجابة طلب AJAX الخاص بك، IE يحب هذا على سبيل المثال.حاول إضافة: cache:false لطلب AJAX:

function getCurrentUser() {
  $.ajax({
    type: 'GET',
    cache: false,
    url: 'http://server/sites/rootweb/_vti_bin/UserService.svc/GetCurrentUser',
    success: function (data) {
      printToDiv(data);
    }
  });
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top