OwinStartup не стреляет

У меня был код конфигурации OwinStartup, и он прекратил работать. К сожалению, я не уверен, что я сделал, чтобы заставить его перестать работать, и мне очень сложно понять это.

Чтобы убедиться, что у меня есть основы, я дважды проверял, чтобы убедиться, что у меня есть

[assembly:OwinStartup(typeof(WebApplication.Startup))] 

и убедитесь, что у меня нет appSetting для owin: AutomaticAppStartup, для которого установлено значение false, поэтому я сделал один набор равным true, чтобы быть безопасным, поскольку там ничего не было.

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

Я также пробовал специально вызывать appSetting:

<add key="owin:appStartup" value="WebApplication.Startup" />

Прежде чем он перестал работать, я обновил пакеты Microsoft.Owin.Security NuGet до 2.0.2, поэтому я попытался вернуть их в 2.0.1 (это было больно), но ничего не изменило. У меня есть WebActivator, установленный в проекте, и я использую это для загрузки других вещей, но я тестировал это на новом шаблоне WebApplication, и он работает там, поэтому я не думаю, что это преступник.

Я также попытался удалить мой класс Startup и использовать Visual Studio, чтобы добавить новый, используя тип класса запуска OWIN в "Добавить новый элемент" и который также не вызван. Затем я попытался добавить второй класс Startup, так как я знаю, что он выдаст исключение, если определено несколько атрибутов OwinStartup, но оно не выбрасывает никаких исключений.

Не уверен, что еще попробовать. Любые мысли?

Обновление

Оказывается, что Resharper удалил ссылку на Microsoft.Owin.Host.SystemWeb, когда я использовал его для удаления неиспользуемых ссылок.

Ответ 1

Убедитесь, что вы установили пакет Microsoft.Owin.Host.SystemWeb в проект. Этот пакет необходим для обнаружения запуска в приложениях, размещенных на IIS. Для получения дополнительной информации вы можете обратиться к этой статье.

Ответ 2

Если вы обновили версию более старой версии MVC, убедитесь, что у вас нет

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

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

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

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

Я понимаю, вы уже упомянули об этом, но иногда люди (например, я) не читают весь вопрос и просто переходят к ответам...

Где-то вдоль линии - когда я обновился до MVC 5, это было добавлено, и я никогда не видел его до сегодняшнего дня.

Ответ 3

Альтернативный ответ на обсуждаемую проблему - Овин "не стреляет". В моем случае я часами думал, что он не стреляет из-за невозможности установить в нем точку останова.

При отладке запуска OWIN в visual studio

  • IIS Express - Запуск "F5" будет разбит на код запуска OWIN

  • IIS. Запуск "F5" не будет прерываться до тех пор, пока не будет загружен код OWIN (и global.asax). Если вы подключаетесь к W3P.exe, вы сможете войти в него.

Ответ 4

Если у вас возникли проблемы с отладкой кода в классе Startup, у меня также была эта проблема - или я думал, что сделал. Код запускался, но я считаю, что это происходит до того, как отладчик подключен, поэтому вы не можете установить контрольные точки в коде и посмотреть, что происходит.

Вы можете доказать это, выделив исключение в методе Configuration класса Startup.

Ответ 5

СОВЕТЫ ДЛЯ ДЕВУШКИ

Если отладка не работает, попробуйте использовать IIS Express или попробуйте метод ниже для локального IIS

Использование локального IIS

По какой-то причине этот метод позволяет отлаживать этот метод:

  • Запросить веб-страницу
  • Приложить к процессу w3wp.exe
  • Нажмите на файл web.config
  • Запросить веб-страницу

Дополнительный совет

Возможно, это приведет к сбросу кеша:

  1. В web.config добавьте атрибут optimizeCompilations с ложным значением

    < компиляция debug = "true"... optimizeCompilations = "false" >

  2. Запустить сайт

  3. Отменить изменение в web.config

Ответ 6

У меня была аналогичная проблема с этим и очистка Временных файлов ASP.NET исправила его. Надеюсь, это поможет кому-то.

Ответ 7

У меня была та же проблема. Пакет Microsoft.Owin.Host.SystemWeb был установлен, но во время установки NuGet по какой-то причине не смог добавить dll в качестве ссылки. Убедитесь, что у вашего проекта есть эта ссылка. Если нет, попробуйте переустановить:

update-package Microsoft.Owin.Host.SystemWeb -reinstall

У меня была ошибка, как показано ниже при повторной установке, но каким-то образом она работала:

Не удалось выполнить системный вызов. (Исключение из HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

Ответ 8

В моем случае пул приложений IIS не был установлен в v4. Это было v2.

Изменил AppPool на v4, и все было в порядке.

Ответ 9

У меня была такая же проблема, когда я добавил Owin к существующему веб-проекту. В итоге я обнаружил, что проблема связана с следующим в файле web.config.

<assemblies>
  <remove assembly="*" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />

   ...

</assemblies>

Устранение сборки = "*" вызывает проблему. Когда я удаляю эту строку, запускается код запуска Owin. Я в конечном итоге изменил его на следующее, и он отлично работал

<assemblies>
  <remove assembly="*" />
  <add assembly="Microsoft.Owin.Host.SystemWeb" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />
  <add assembly="System.Web.Helpers" />
...
</assemblies>

Ответ 10

В моем случае мой путь вывода на сайт меняется кем-то, IIS Express даже не загружает OWIN, и класс установки не будет удачен, конечно. После того, как я установил выходной путь как "bin", он работает хорошо.

Ответ 11

В моем случае этот пакет Microsoft.Owin.Host.SystemWeb присутствует в проекте.

Но ниже двух тегов нет в web.config.

<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />

после их добавления он работает плавно.

Ответ 12

В моем случае мой web.config

<authorization>
  <allow users="?" />
</authorization>

Чтобы заставить его вернуться к Овину, мне нужно было

<authorization>
  <deny users="*" />
</authorization>

Ответ 13

Я общался с множеством предложений на этом посту.

У меня было следующее, но я все равно не мог приземлиться на точке разрыва. Выброс исключения показал, что код вводился.

<appSettings>
...
  <add key="owin:AutomaticAppStartup" value="true" />
  <add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>

Наконец, из отчаяния я просмотрел свойства project- > , а затем в разделе WEB я также установил флажок NATIVE CODE (ASP.NET должен быть уже проверен).

Наконец-то это исправлено для меня.

Примечание. Я использую Visual Studio 2017 Professional.

Ответ 14

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

То, что исправляло проблему на моем конце, заключалось в том, чтобы поместить обратную косую черту в конец значения RedirectUri в web.config (сумасшедший, я знаю!). RedirectUri - это параметр в UseOpenIdConnectAuthentication.

Итак, вместо:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />

Сделай это:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />

И обновил URL-адрес ответа в настройках приложения Azure.

Это как-то заставило Startup работать как ожидалось (возможно, очистило некоторый кеш), а точки останова теперь стреляют.

FYI. Я моделировал свой код здесь: https://github.com/microsoftgraph/aspnet-connect-sample

Ответ 15

После преобразования библиотеки классов в проект веб-приложений я столкнулся с этим и стал упрямым. Оказалось, в моем файле .csProj меня было следующее:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
  • таким образом, создавая различные dll в подпапку папки bin (которая ifc не будет работать). Решение заключалось в том, чтобы изменить как текстовое содержимое для OutputPath и просто bin\.

Ответ 16

Для меня это было потому, что они не находятся в одном пространстве имен. После того, как я удалю свой AppStart из "project.Startup.AppStart" и пусть они оба Startup.cs и Startup.Auth.cs с пространством имён "project.Startup", все вернулось к работе отлично.

Надеюсь, это поможет!

Ответ 17

Если вы видите эту проблему с хостингом IIS, но не при отладке F5, попробуйте создать новое приложение в IIS.

Это исправило это для меня. (окна 10) В конце я удалил "плохое" приложение IIS и заново создал идентичный с тем же именем.

Ответ 18

Я думаю, что некоторые люди пытались добраться до того, что, если вы хотите программно сделать ваш сервер OWIN "ожившим", вы бы назвали что-то вроде этого:

using Microsoft.Owin.Hosting;

    IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000"); 
              // Start Accepting HTTP via all interfaces on port 5000

После того, как вы сделаете этот вызов, вы увидите вызов режима StartupMethod() в отладчике

Ответ 19

Сначала добавьте OWIN Auth Class, а затем включите OWIN: AutomaticAppStartup в свой web.config как Теперь он срабатывает