احصل على SPWeb من SPContext في WCF المستضاف على SharePoint
-
10-12-2019 - |
سؤال
لقد قمت بإنشاء ونشر خدمة WCF في SharePoint وأرسل الطلبات باستخدام JQuery.كل شيء يعمل بشكل جيد باستثناء المواقع الفرعية.
لنفترض أن لدي عنواني URL للخدمة:
- http://localhost:1111/_vti_bin...../MethodName
- http://localhost:1111/subsite/_vti_bin...../MethodName
عندما أستخدم عنواني URL هذين، فإن ملف SPContext.Current.Site
هو نفسه وهو الصحيح.
لكن ال SPContext.Current.Web
هو نفسه الذي هو غير صحيح.باستخدام عنوان URL الثاني SPWeb
يجب أن يكون الكائن هو شبكة الويب الفرعية وليس شبكة الويب الجذرية.
كيف يمكنني الحصول على الموقع الفرعي باعتباره SPWeb
هدف؟هل أحتاج دائمًا إلى تمرير عنوان URL للويب كمعلمة لطريقة WCF؟
المحلول
وبعد البحث توصلت إلى أن SPContext.Current.Web
سوف يعود دائما RootWeb
لذلك أحتاج إلى عنوان URL لشبكة الويب الفرعية المحددة.
لتجنب تمرير عنوان URL لـ SPWeb إلى كل أسلوب WCF حيث أحتاج إلى كائن SPWeb، يمكنني القيام بما يلي:
أقوم بتشغيل خدمة WCF الخاصة بي في وضع التوافق مع ASP.NET حتى أتمكن من استخدام HttpContext
كائن، ويمكنني استخدامها HttpContext.Current.Request.RawUrl
.تقوم هذه الخاصية بإرجاع كل شيء في سلسلة URL بعد اسم المجال.ثم يمكنني اقتطاع هذه السلسلة للحصول على عنوان URL النسبي للويب الفرعي وتمريره إلى ملف OpenWeb()
طريقة.
مثال:
من جانب العميل، تكون وسيطة URL لاستدعاء JQuery AJAX هي:
http://localhost:1111/subsite/_vti_bin...../MethodName
على جانب الخادم إذا كنت تستخدم HttpContext.Current.Request.RawUrl
انا حصلت:
/subsite/_vti_bin...../MethodName
ثم بعد أن أقوم باقتطاع هذه السلسلة أقوم بتمرير ملف /subsite
إلى OpenWeb()
طريقة.
أي أفكار أخرى هي موضع تقدير كبير.
نصائح أخرى
كان لدي نفس الحالة.لكنني أخذت عنوان URL من هنا: giveacodicetagpre.
لذلك كنت قادرا على إنشاء كائن SPSITE: giveacodicetagpre.