لا يتغير المستخدم الحالي في خدمة الويب بعد تسجيل دخول مستخدم آخر
-
10-12-2019 - |
سؤال
السياق: لدي خدمة الويب هذه مستضافة في 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);
}
});
}