سؤال

لدي تطبيق ويب حيث يمكن للمستخدمين تحميل الملفات.يتم تخزين الملفات فعليًا بواسطة IIS في مجلد ظاهري تم تعيينه لجهاز تخزين خارجي.يتم تخزين سجل حول كل ملف تم تحميله في قاعدة البيانات.يحتوي سجل قاعدة البيانات على معلومات حول ما إذا كان الملف لا يزال "نشطًا" (لم يتم حذفه بواسطة المستخدم)، ومسار المجلد الظاهري (على سبيل المثال:/storage1/اختبار)

الآن، أود، بشكل دوري، تشغيل مهمة إدارية خارج IIS لاسترداد قائمة بجميع الملفات التي لم تعد "نشطة" وحذفها من التخزين الفعلي.أرغب في تشغيل المهمة الإدارية خارج IIS كمهمة مجدولة أو خدمة Windows.ومع ذلك، لا يمكنني معرفة كيفية تعيين مسار المجلد الظاهري المخزن في سجل قاعدة البيانات إلى مسار فعلي، في العملية الخارجية.هل هناك أي طريقة "للاستفادة" من IIS من عملية خارجية أو أي طريقة ذكية أخرى للقيام بذلك؟(أم أنني أسير في الاتجاه الخاطئ تمامًا).

تيا /هنريك

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

المحلول

وستحتاج إلى إضافة مرجع إلى System.Web في المشروع.

string path = System.Web.HttpServerUtility.MapPath("/MyWebSite");

نصائح أخرى

إذا التطبيق هو التطبيق ASP.NET، هل يمكن تحقيق الدعوة Server.MapPath - إذا كنت تستخدم نفس الدليل الظاهري حيث التطبيق الرئيسي

وعلى خلاف ذلك، كنت تشير الى تخزين "مسار قاعدة" (الذي يتوافق مع مسار الدليل الظاهري) في التكوين عن التطبيق الخارجي وفقط وصل هذا الطريق القاعدة ومسار الملف إلى مسار كامل.

ومارك

إذا كنت بحاجة إلى استرداد هذا المسار برمجياً، فيمكنك القيام بشيء مثل:

using(DirectoryEntry de = 
    new DirectoryEntry("IIS://Localhost/w3svc/1/root/storage1/test"))
{
    string pathToFiles = de.Properties["Path"].Value;

    // Do my file tidy up tasks....
}

هناك بضعة أشياء يجب ملاحظتها:

  • الرقم '1"في طريقDirectoryEntry مُنشئ هو رقم IIS للموقع.

  • في الطريقIIS://Localhost/w3svc/1/root/storage1/test، الجزء الاولIIS://Localhost/w3svc/1/root هو تطبيق "الجذر" لموقع الويب الخاص بك.أنت دائما بحاجة إلى هذا الجزء.

  • ستحتاج إلى إضافة إشارة إلى System.DirectoryServicesالتجمع لمشروعك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top