كيف يمكنني التعامل مع تعيينات المعالج نظيفة في IIS7 باستخدام مساحة اسم Microsoft.Web.administration؟

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

  •  13-09-2019
  •  | 
  •  

سؤال

عند التعامل مع تعيينات المعالج باستخدام Microsoft.Web.Administration مساحة الاسم، هل هناك طريقة لإزالة <remove name="handler name"> على مستوى الموقع.

على سبيل المثال، لدي موقع يرث كل تعيينات المعالجات من تكوين تعيينات المعالج العالمي. في applicationHost.config ال <location> العلامة تبدو في البداية مثل هذا:

<location path="60030 - testsite-60030.com">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication userName="" />
      </authentication>
    </security>
  </system.webServer>
</location>

لإزالة معالج أستخدم الرمز مماثلة لهذا:

string siteName = "60030 - testsite-60030.com";
string handlerToRemove = "ASPClassic";

using(ServerManager sm = new ServerManager())
{
  Configuration siteConfig = 
    serverManager.GetApplicationHostConfiguration();
  ConfigurationSection handlersSection = 
    siteConfig.GetSection("system.webServer/handlers", siteName);
  ConfigurationElementCollection handlersCollection = 
    handlersSection.GetCollection();

  ConfigurationElement handlerElement = handlersCollection
    .Where(h => h["name"].Equals(handlerMapping.Name)).Single();

  handlersCollection.Remove(handlerElement);
}

هذا يؤدي إلى الموقع <location> علامة تبدو وكأنها:

<location path="60030 - testsite-60030.com">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication userName="" />
      </authentication>
    </security>    
    <handlers>
      <remove name="ASPClassic" />
    </handlers>
  </system.webServer>
</location>

حتى الان جيدة جدا. ومع ذلك إذا قمت بإعادة إضافة ASPClassic معالج هذا النتائج:

<location path="60030 - testsite-60030.com">
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication userName="" />
      </authentication>
    </security>    
    <handlers>
      <remove name="ASPClassic" />
      <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" />
    </handlers>
  </system.webServer>
</location>

يمكن أن يؤدي ذلك إلى الكثير من Cruft بمرور الوقت لكل موقع ويب يحتوي على معالج إزالته ثم إعادة إضافته برمجيا. هل هناك طريقة لإزالة <remove name="ASPClassic" /> باستخدام رمز مساحة الاسم Microsoft.Web.Administration؟

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

المحلول

لقد ناقشت هذا مع فريق المنتج IIS ويبدو أن هذا خطأ مع نظام التكوين. ما هو أكثر إثارة للاهتمام هو أنه عندما أحاول هذا الرمز على Win7 مع IIS 7.5، لا أستطيع حتى إعادة إضافة المعالج برمجيا. محاولة القيام بذلك بنتائج استثناء كوم ينص على ما يلي:

"خطأ: لا يمكن إضافة إدخال مجموعة مكررة من النوع" إضافة "مع سمة مفتاح فريدة من نوعها تعيين" Aspclassic ""

يصبح هذا أكثر إشكالية لأنه بمجرد "إزالة المستخدم" معالج لموقع، لا يمكن إعادة إضافته من خلال API MWA حتى يتم تثبيت هذا الخطأ.

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