Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Мне также пришлось добавить дополнительную настройку в мой 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);

Ответ 3

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

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

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

в web.config. Он подавит вызов запуска

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

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

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

Ответ 4

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

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

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

    <modules runAllManagedModulesForAllRequests="true" />