IIS: كيف تحصل على مسار التمثيل؟
-
01-10-2019 - |
سؤال
أحاول الحصول على قائمة أنواع MIME المعروفة لخادم IIS (الذي يمكنك رؤيته سُئل وأجبت من قبلي قبل عامين). تتضمن الإجابة المليئة بالنسخ:
GetObject("IIS://LocalHost/MimeMap")
MSDN
GetObject("IIS://localhost/mimemap")
KB246068
GetObject("IIS://localhost/MimeMap")
مدونة سكوت هانسلمان
new DirectoryEntry("IIS://Localhost/MimeMap"))
مكدس فائض
new DirectoryEntry("IIS://Localhost/MimeMap"))
مكدس فائض
New DirectoryServices.DirectoryEntry("IIS://localhost/MimeMap")
مراجعات السرعة
انت وجدت الفكرة. يتفق الجميع على أنك تستخدم مسارًا سحريًا IIS: // localhost/mimemap. وهذا يعمل بشكل رائع ، باستثناء الأوقات التي لا.
الفكرة الوحيدة التي يمكنني العثور عليها حول سبب فشلها ، من مدونة IIS MVP ، كريس كرو ، مدونة:
string ServerName = "LocalHost";
string MetabasePath = "IIS://" + ServerName + "/MimeMap";
// Note: This could also be something like
// string MetabasePath = "IIS://" + ServerName + "/w3svc/1/root";
DirectoryEntry MimeMap = new DirectoryEntry(MetabasePath);
هناك دليلان هنا:
- هو يتصل
iis://localhost/mimemap
ال مسار الأيض. وهو ما يبدو لي كما هو نوع من "طريق"إلى"التمثيل". - يقول أن طريق إلى التمثيل يمكن أن يكون شيئًا آخر ؛ ويعطي مثالا على ما يمكن أن يكون.
الآن أنا ، والكوكب بأكمله ، أرد المتشددين ""Metabasepath" كما
iis://localhost/MimeMap
ماذا يجب أن يكون حقا؟ ما الذي يجب أن يفعله الرمز لبناء MetabasePath صالح؟
ملاحظة: أنا لا أحصل على خطأ مرفي في الوصول ، والخطأ هو نفسه عندما يكون لديك Metabasepath غير صالح ، على سبيل المثال iis://localhost/SoTiredOfThis
المحلول
إذا كنت تعمل مع تكوين IIS الخاص بجهازك المحلي ، أي الكود الخاص بك و IIS في نفس المربع ، فهذا يكفي تحديد:
IIS://Localhost/mimemap
ال IIS:
يُعرف الجزء أيضًا باسم لقب في لغة أولي.
إذا فتحت ملف Metabase IIS6 (C:\Windows\System32\inetsrv\metabase.xml
) ستجد "نقطة" كبيرة من XML. هذا في الواقع هيكل شجرة مسطح.
يتم تمثيل المسارات في عملية التمثيل Location
صفات.
اللقب IIS://localhost
خرائط ل Location
طريق /LM
وهو بشكل فعال جذر الشجرة.
اللقب IIS://localhost/MimeMap
خرائط ل Location
طريق /LM/MimeMap
.
إذا كان الرمز الخاص بك يصل إلى عملية التمثيل على الآلات البعيدة ، فبدلاً من التحديد IIS://localhost/[path]
, ، يحدد المرء IIS://[RemoteMachineName]/[path]
. هذا ما يعنيه تعليق كريس كراوس.
IIS://localhost/MimeMap
هي أيضا قائمة نوع MIME MITER. جميع المواقع ترث هذه القائمة (تعتمد عملية إعادة IIS بشكل كبير على الخصائص الموروثة).
إذا كنت ترغب في تجاوز أنواع MIME لموقع معين ، فستقوم بتعديل:
IIS://localhost/W3SVC/[iisnumber]/ROOT/MimeMap
من المفيد فتح ملف Metabase IIS والحفر لفهم ما يجري تحت غطاء المحرك.
تحديث:
للإجابة على سؤالك حول لماذا يمكنك إنشاء ملف DirectoryEntry
كائن حيث يكون المسار غير صالح ، DirectoryEntry
هو كائن غلاف للأغراض العامة يستخدم لربط أنواع مختلفة من مزودي ADSI مثل IIS و LDAP و Winnt. يسمح بإنشاء DirectoryEntry
الكائنات التي قد لا يكون فيها بالضرورة كائن مطابق في المسار المحدد. قد تتطلب بعض عمليات مزود ADSI هذه القدرة.
هناك طريقة ثابتة DirectoryEntry
اتصل Exists
التي يمكنك استخدامها لاختبار وجود كائنات. فمثلا:
// Does Default Website exist?
if(DirectoryEntry.Exists("IIS://localhost/w3svc/1"))
{
// Do work...
}
نصائح أخرى
كنت أواجه مشكلة في إرجاع 0x80005000 عند محاولة القيام بذلك. كان السبب الغبي لمشكلتي هو أنني كنت أستخدم IIS7 ولم أقم بتثبيت دعم توافق Metabase IIS6.