Как заставить IIS распознавать класс запуска OWIN?

Моя веб-служба OWIN прекрасно работает в Visual Studio 2013, но когда я публикую ее на реальном сайте IIS, она действует так, как будто метод конфигурации в классе запуска не запускался. Я могу делать «обычные» вещи, такие как переход к приложению и просмотр структуры каталогов, но ничего из того, что предположительно было настроено с помощью IAppBuilder, не работает. Например, я получаю сообщение об ошибке 404.0 при переходе по URL-адресу, настроенному в программе запуска для выдачи маркера носителя OAuth2. Как будто Startup.Configuration(приложение IAppBuilder) никогда не запускалось.

Я использую атрибут [assembly: OwinStartup(typeof(MyNamespacedStartupClass))] для обозначения класса запуска.

Я использовал NuGet для получения как Microsoft.Owin.Host.SystemWeb, так и Microsoft.Owin.Diagnostics в соответствии с инструкциями, которые я видел, но это не имеет значения.

Что еще я должен сделать?


person LSpencer777    schedule 18.11.2013    source источник
comment
1) Убедитесь, что ваш пул приложений находится в интегрированном режиме версии 4.0. 2) Убедитесь, что вы поместили в корзину Microsoft.Owin.Host.SystemWeb (я вижу, вы его установили). Просто убедитесь, что он также находится в папке bin. Вы можете проверить, полезна ли эта статья: asp.net/aspnet/overview/owin-and-katana/   -  person Praburaj    schedule 19.11.2013
comment
Ваш номер 1 был ответом! Если вы опубликуете это как ответ, а не комментарий, я могу отдать вам должное. :)   -  person LSpencer777    schedule 19.11.2013


Ответы (4)


  1. Убедитесь, что ваш пул приложений находится в интегрированном режиме версии 4.0.
  2. Убедитесь, что вы установили Microsoft.Owin.Host.SystemWeb (я вижу, вы его установили) — просто убедитесь, что он также находится в папке bin.

В этой статье будет больше информации о том, как ПО промежуточного слоя OWIN работает в интегрированном конвейере.

person Praburaj    schedule 19.11.2013
comment
Вы должны добавить хотя бы минимальный образец кода связанного документа. Если внешние ссылки исчезнут, этот ответ станет бесполезным. - person JotaBe; 07.05.2015
comment
Добавление Microsoft.Owin.Host.SystemWeb решило мою проблему. Я создал пустое приложение WebApi, и мне пришлось вручную добавлять ссылки OWIN. - person Alex Klaus; 17.08.2015

Мне также пришлось добавить дополнительную настройку в мой web.config

<configuration>    
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />       
    </system.webServer> 
</configuration>

Откуда: https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIS

IIS имеет собственный модуль статического файла, оптимизированный для пропуска других частей конвейера, если он видит пути к файлам, которые не соответствуют другим обработчикам (например, не aspx). Это означает, что промежуточное программное обеспечение браузера каталогов, вероятно, будет работать, но тогда промежуточное программное обеспечение статического файла может быть обойдено в пользу собственного модуля статического файла.

Это говорит IIS не пропускать управляемые модули Asp.Net, даже если собственный статический файловый модуль считает, что у него есть совпадение.

Там же описан еще один шаг, но мне он не понадобился:

Кроме того, добавьте следующий маркер этапа ПОСЛЕ ПО промежуточного слоя статического файла (в пространстве имен Microsoft.Owin.Extensions): app.UseStageMarker(PipelineStage.MapHandler);

person Martijn Evens    schedule 12.03.2015

Вероятно, причина, по которой вы в какой-то момент обновились со старой версии MVC:

Убедитесь, что у вас нет

  <add key="owin:AutomaticAppStartup" value="false" />

в вашем web.config. Он будет подавлять вызов запуска

Вместо этого измените его на это

  <add key="owin:AutomaticAppStartup" value="true" />

Где-то по ходу дела — когда я обновился до MVC 5, это было добавлено (на самом деле почти по иронии судьбы это было завтра, год назад), и я даже не знал, что такое owin, до сегодняшнего дня, когда я попытался его использовать.

person Simon_Weaver    schedule 14.05.2015

Я также столкнулся с теми же проблемами, когда перенес уже работающий сайт MVC5 на новый сервер. Это вызывало у меня кошмары, просто напомню, что мне пришлось сделать все это, чтобы заставить его работать.

  1. Добавьте [assembly: OwinStartupAttribute(typeof([YourAssemblyName].Startup))] this в класс Startup (после операторов using и перед объявлением пространства имен)
  2. Добавьте эти ключи в раздел <appSettings> файла web.config.

    <add key="owin:AppStartup" value="[NamespaceForYourStartUpClass].Startup, [YourAssemblyName]" />
    <add key="owin:AutomaticAppStartup" value="true" />
    
  3. И, наконец, как предложил Martijn Evens, добавьте следующее в раздел <system.webserver> в web.config.

    <modules runAllManagedModulesForAllRequests="true" />
    
person Niraj    schedule 29.07.2015