Как загрузить файл web.config с помощью WebDAV на IIS7?

Я хочу скопировать веб-сайт ASP.NET MVC на удаленный сервер IIS 7 с помощью WebDAV. Я создал сайт в IIS, включил WebDAV и назначил специальный пул приложений, который я назвал «Пул приложений WebDAV». Используя клиент Windows 7 или Vista, я могу смонтировать удаленный сайт как сетевой диск. Все идет нормально.

Однако у меня проблемы с загрузкой web.config файлов на удаленный сайт. Одна из проблем заключается в том, что как только web.config загружен, он используется для настройки сайта WebDAV. Файл web.config в папке Views проекта MVC эффективно блокирует доступ к этой папке.

Чтобы обойти эту проблему, я настроил пул приложений в файле applicationHost.config:

<configuration>
  <applicationPools>
    <add name="WebDAV Application Pool"
       autoStart="true"
       enableConfigurationOverride="false" />
  </applicationPools>
</configuration>

Интересная часть - это атрибут enableConfigurationOverride:

Значение true означает, что делегированные настройки в файлах Web.config будут обрабатываться для приложений в этом пуле приложений. Если false, все настройки в файлах Web.config будут игнорироваться для этого пула приложений.

Это позволяет загрузить файл web.config в папку Views, не нарушая доступа к папке.

Однако мне все еще не удается загрузить файл web.config в корневую папку. У меня есть следующие настройки в файле applicationHost.config, чтобы фильтрация запросов не мешала WebDAV:

<configuration>
  <location path="webdav.mysite.tld">
    <system.webServer>
      <security>
        <requestFiltering>
          <fileExtensions applyToWebDAV="false" />
          <verbs applyToWebDAV="false" />
          <hiddenSegments applyToWebDAV="false" />
        </requestFiltering>
      </security>
    </system.webServer>
  </location>
</configuration>

В частности, hiddenSegments обычно блокирует доступ к web.config, но установка для атрибута applyToWebDAV значения false должна гарантировать, что этот файл не будет заблокирован при использовании WebDAV.

К сожалению, мне все еще не удается скопировать свой web.config файл в корневую папку сайта. Выполнение перетаскивания в проводнике Windows на подключенный сетевой диск WebDAV приведет к появлению следующего сообщения об ошибке:

Ошибка 0x80070057: неверный параметр.

По проводу кажется, что возвращается HTTP-статус 400 Bad Request.

Могу ли я что-нибудь сделать, чтобы настроить WebDAV на IIS 7, чтобы избежать этой проблемы?


Следовать за

В настоящее время я не могу воспроизвести описанную выше проблему. Возможно, мне пришлось перезапустить что-то или какой-то другой неизвестный фактор устранил мою проблему. Суть в том, что теперь я могу опубликовать веб-сайт с помощью WebDAV.


person Martin Liversage    schedule 08.03.2010    source источник
comment
Ваша информация о enableConfigurationOverride бесценна. Я не могу поверить, что это не параметр, доступный из графического интерфейса где угодно.   -  person cjbarth    schedule 05.11.2012


Ответы (1)


1) Откройте %windir%\system32\inetsrv\config\schema\WEBDAV_schema

2) Добавьте следующее внутри раздела configSchema

<sectionSchema name="system.codedom">
  <element name="compilers">
    <collection addElement="compiler" removeElement="remove" clearElement"clear">
      <attribute name="language" type="string" isCombinedKey="true"/>
      <attribute name="extension" type="string" isCombinedKey="true"/>
      <attribute name="type" type="string"/>
      <attribute name="warningLevel" type="int"/>
      <collection addElement="providerOption">
        <attribute name="name" type="string" isUniqueKey="true"/>
        <attribute name="value" type="string"/>
      </collection>
    </collection>
  </element>
</sectionSchema>
person Nick DeMayo    schedule 07.06.2010
comment
извините за то, что это изображение, но по какой-то причине редактор удалял xml, если я вставлял его туда. - person Nick DeMayo; 07.06.2010
comment
Какова цель изменения схемы? В любом случае, похоже, моя проблема исчезла. - person Martin Liversage; 07.06.2010
comment
Здесь некорректный XML, слишком маленький для редактирования. clearElementclear должен быть clearElement = clear. - person Rob Powell; 19.02.2018