ADSI الاستعلام ضد IIS لا يتفق مع إدارة IIS على ويندوز فيستا

StackOverflow https://stackoverflow.com/questions/1806820

  •  05-07-2019
  •  | 
  •  

سؤال

باستخدام ويندوز فيستا...

لدي برنامج نصي يستخدم ADSI إلى مجموعة ScriptMaps على موقع IIS.إنه جافا سكريبت تشغيل داخل cscript.exe و رمز تبدو شيئا مثل هذا:

var web = GetObject("IIS://localhost/W3SVC/1");
var maps = web.ScriptMaps.toArray();
map[maps.length] = ".aaa,c:\\path\\to\\isapi\\extension.dll,1,GET,POST";
web.ScriptMaps = maps.asDictionary();
web.SetInfo();

عندما أنظر في إدارة IIS بعد تشغيل البرنامج النصي ، أستطيع أن أرى إدخال جديد في قائمة معالج تعيينات.له اسم غريب "AboMapperCustom-43155" ، التي أفهم يأتي من IIS7 التوافق طبقة ADSI.

إذا في "إدارة IIS" ، ثم إزالة تلك معالج تعيينات, ثم تشغيل آخر ADSI النصي الاستعلام عن ScriptMaps الملكية ، استردادها ScriptMaps في البرنامج النصي لا تزال قوائم دخول هذا كان مجرد إزالتها.النتائج في ADSI النصي لا أتفق مع قائمة "معالج التخطيط" يظهر في "إدارة IIS".

هذا قائما حتى بعد بدء/إيقاف IISADMIN و W3SVC.

هذا هو السلوك المتوقع?ADSI معتمد بأنه "وضع التوافق" في IIS7.هذا هو قطعة أثرية من ذلك ؟

وأعتقد أنه إذا كان معالج الخرائط يتم إزالتها من "إدارة IIS" ، ثم هو ذهب حقا, على الرغم من أنه لا يزال يحصل على عاد من ADSI الاستعلام.

هل يستطيع أحد أن يقدم أي توضيح على هذا ؟

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

المحلول

عند إضافة 'scriptmap' باستخدام ADSI التوافق بت (باستخدام موقع ويب الافتراضي جدلا) ، وهذا يضيف معالج الخرائط applicationHost.config الملف على الموقع:

<location path="Default Web Site">
  <system.webServer>
    <handlers>
        <add name="AboMapperCustom-12345678" ... />
    </handlers>
  </system>
</location>

عند حذف معالج رسم الخرائط في IIS7 مدير بدلا من إزالة الخرائط من applicationHost.config ملف القسم كما هو موضح أعلاه ، web.config يتم إضافة الملف إلى جذر الموقع التالي:

<configuration>
  <system.webServer>
    <handlers>
        <remove name="AboMapperCustom-12345678" />
    </handlers>
  </system>
</configuration>

عند الحصول على تكوين موقع ويب باستخدام المدار الجديد Microsoft.Web.Administration .NET API يمكنك قراءة التكوين على مختلف المستويات ، على سبيل المثال:

1:قراءة التكوين في applicationHost.config أو APPHOST مستوى

ServerManager serverManager = new ServerManager();
var site = serverManager.Sites.Where(s => s.Id == 1).SingleOrDefault();
Configuration siteConfig = serverManager.GetApplicationHostConfiguration();
ConfigurationSection handlersSection = 
     siteConfig.GetSection("system.webServer/handlers", site.Name);
ConfigurationElementCollection handlersCollection = 
     handlersSection.GetCollection();

foreach (var item in handlersCollection)
{
    Console.WriteLine(item.Attributes["name"].Value);
}

في المثال أعلاه, حتى ولو كنت قد إزالة الخرائط ، وسوف لا يزال يتم سرد عندما بالتكرار معالج جمع رسم الخرائط.هذا لأنك طلبت التكوين في التطبيق المضيف المستوى.أي web.config الملفات الموجودة في الموقع الجذر أو أقل لن يتم قراءة و معالج <add/> و <remove/> توجيهات لا يتم تضمين.

2:يمكنك قراءة التكوين الخاصة إلى موقع (أو فرعي في الموقع):

ServerManager serverManager = new ServerManager();
Configuration siteConfig = serverManager.GetWebConfiguration("Default Web Site");    
ConfigurationSection handlersSection = 
    siteConfig.GetSection("system.webServer/handlers");
ConfigurationElementCollection handlersCollection = 
    handlersSection.GetCollection();

foreach (var item in handlersCollection)
{
    Console.WriteLine(item.Attributes["name"].Value);
}

هذا أيضا قراءة الموقع web.config الملف سيعود معالج تعيين قائمة حسابات <add/> و <remove/> التوجيهات المحددة في web.config.

هذا هو ما IIS7 تطبيق إدارة يفعل عند عرض وتعديل معالج تعيينات.هو إضافة وإزالة معالجات من خلال خلق (إذا لزم الأمر) ، web.config الملف في موقع المجلد الجذر (أو المجلدات الفرعية) وإضافة المطلوبة <add/> و <remove/> في هذا المستوى.

IIS6 طبقة توافق يظهر أن تعمل فقط في applicationHost.config APPHOST مستوى (الخيار 1 أعلاه) والذي هو السبب في أنك ترى هذه الاختلافات.

هو هذا الخلل ؟ لست متأكدا من أنه هو لأنه في نهاية المطاف ADSI لم يكن web.config علم في المقام الأول.أيضا MS لإضافة طريقة جديدة أو العلم أن تسمح لك لتحديد المستوى الذي كنت تريد حقا أن تجعل هذه scriptmap' التغييرات التي قد تعني كسر واختبار ADSI مكونات ، والتي بدورها قد يعرض البق.سلوك هناك لمحاكاة تعديل القديم IIS6 التعريف ، applicationHost.config هو في الواقع analagous إلى التعريف حتى يمكن القول صواب أو خطأ, انها تفعل الشيء الصحيح.

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