OwinStartup не стреляет


350

У меня был код конфигурации 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, и он работает там, поэтому я не думаю, что это виновник.

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

Не уверен, что еще попробовать. Какие-нибудь мысли?

Обновить

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


37
У вас есть пакет Microsoft.Owin.Host.Systemweb, установленный в этом приложении. Убедитесь, что эта DLL также является частью папки bin?
— Прабурай

1
Это было это. Спасибо. Я думаю, что случилось то, что я использовал Resharper для удаления неиспользуемых ссылок в какой-то момент, и он не считает, что он нужен. Если вы хотите поставить это как ответ, я определенно отмечу это как решение. Спасибо за помощь.
— Джефф Трейтинг

2
Джефф, ReSharper удалил «неиспользованную» ссылку на Microsoft.Owin.Host.Systemweb - вы говорите об «использовании»? В каком файле Startup.cs?
— vkelman

4
У меня была точно такая же проблема, решарпер удалил ссылку на Microsoft.Owin.Host.SystemWeb. Я исправил это, открыв окно консоли диспетчера пакетов в Visual Studio и выполнив следующую команду PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
— Джо Кинг,

1
Как обновление к комментарию @ JoeKing выше. Консоль PM не будет обновляться как «Не найдено». Я должен был пойти на переустановку. PM>
— Инсталляционный

Ответы:


768

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


4
Каким образом кто-то может запустить обнаружение запуска Овина программным путем в используемой / инвин-инкапсулирующей библиотеке, предполагая, что у нас есть место для его вызова ( PreApplicationStartMethod ), не требуя прямых ссылок на материал Microsoft.Owin? Как мы специально провоцируем Катану звонить Startup.Configuration(IAppBuilder)?
— Джейсон Клебан

7
Попытка создать приложение с нуля, без использования шаблона MVC. Это закончилось 2 часа отчаяния.
— mkvlrn

1
Просто когда я кричал, что reharper - самый большой убийца производительности, у меня возникла эта проблема, и я не мог понять, почему web api перестал работать. Еще одним доказательством является убийство моей производительности.
— Иван Григорьевич

5
Требование ссылаться на библиотеку, которая на самом деле не используется во время компиляции, является плохой разработкой Microsoft! Решарпер делает все возможное, но нет оружия против таких плохих решений.
— ps_ttf

22
Удивительно. Каждый раз, когда я добавляю файл запуска OWIN, у меня возникает эта проблема. И каждый раз, когда я забываю, почему, и в конечном итоге на этот ответ.
— Тобиас

70

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

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

в вашем web.config. Это подавит вызов логики запуска.

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

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

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

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


Такая же проблема возникала при реализации класса запуска Owin в старом проекте mvc. Переключение значения сделало свое дело!
— Darxtar

Это работает для меня Спасибо
— Ghanshyam Singh

51

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

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

  • IIS Express - запуск «F5» приведет к сбою кода запуска OWIN

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


2
вы правы! Это просто отладчик Visual Studio 2013, который не останавливается на точке останова внутри класса запуска - при работе под локальным IIS. Weird.
— vkelman

4
Можете ли вы рассказать о приложении attach to W3P.exe? У меня та же проблема, что точка останова не попадает в IIS, но в IISExpress. Я остановил приложение, прикрепил его к w3wp.exe и затем перешел на мой локальный хост, но все равно оно не ударило. Я что-то пропустил?
— Шон

Я также не могу подключиться к работающему экземпляру моего приложения, хотя, полагаю, я мог сделать это раньше. Я попытался открыть приложение в браузере, затем в VS2013 использовать «Debug-> Attach to Process», а затем перезагрузить страницу в браузере. VS не остановился. Я знаю, что OWIN Startup выполняется: я включил в него некоторые записи для целей отладки. Это похоже на эпоху промежуточных отладочных отпечатков.
— vkelman

2
Сотрудник только что показал мне, что в iis, если дважды щелкнуть пул приложений по умолчанию и изменить режим управляемого конвейера на классический, отладчик прекратит работу при запуске. Я побежал после этого и получил сообщение о том, что приложение должно было работать в Integrated, поэтому мне пришлось изменить его обратно, но я по крайней мере мог видеть, что оно там ломалось.
— Мэтт

Здесь есть пара вещей. "w3wp.exe" основан на пуле приложений. у вас должна быть возможность отладки global.asax и owin, если ваше приложение не является первым приложением, к которому вы запрашиваете, которое запускает этот процесс. то есть запросите другое приложение в пуле приложений «Присоединиться к w3wp.exe», а затем запросите приложение, которое вы пытались отладить.
— Бретт Касвелл

26

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

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


это именно то, что происходит. Есть ли решение, чтобы класс Startup сработал после подключения отладчика?
— Том Шрек

Могу ли я узнать, как вызвать исключение в методе конфигурации?
— Картикеян

1
Добавил эту строку в Startup.cs, чтобы доказать, что она была выполнена: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
— RaoulRubin

1
@Karthikeyan - добавьте эту строку после ранее (не имеет значения) ConifureAuth (приложение); строка - выбрасывать новое исключение («Привет»);
— Фрэнсис Роджерс

Создайте первую строку System.Threading.Sleep (10_000), чтобы он продолжал ждать достаточно долго, чтобы отладчик подключился, прежде чем продолжить (отрегулируйте при необходимости)
— Джеймс Грей,

16

СОВЕТЫ ОТЛАДКИ

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

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

По какой-то причине этот метод включает отладку этого метода:

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

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

Может быть, это очистит кеш:

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

    <compilation debug = "true" ... optimizeCompilations = "false">

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

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

2
переключение настроек optimizeCompilations="false"работает для меня
— барш

Ты спас мой день! optimizeCompilations = "ложная" работа для меня.
— Востругин

optimizeCompilations спас мой день. Спасибо :)
— Богдан Стоянович

13

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


4
Просто для справки, вот еще один ответ, который предоставляет немного больше информации о том, где хранятся эти файлы: stackoverflow.com/questions/16137457/…
— Сэм Стори

1
Я запускаю IIS EXPRESS и окно 8: удалите здесь: C: \ Users \ Ваше имя пользователя \ AppData \ Local \ Temp \ Временные файлы ASP.NET \ vs
— Серый волк

Спасибо, я заметил этот ответ, потому что до этого у меня была ошибка, связанная с блокировкой файла в папке Temporary ASP.NET Files
— Elger Mensonides

Я боролся с этим в течение 1 целого дня, и, наконец, это сработало для меня. После очистки Temporary ASP.NET Filesсодержимого папки и запуска автозапуска Owin.
— жесткая сделка

11

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

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

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

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


Я боролся с этим некоторое время, и это то, что решило мою проблему. У меня была ссылка на nuget в packages.config, но мой csproj не имел ссылки.
— Закари Гирс

1
В моем случае пакет не был установлен. Запуск установочного пакета Microsoft.Owin.Host.SystemWeb решил мою проблему. Спасибо за подсказку.
— Дж. Хорн

2

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

Поменял AppPool на v4 и все было хорошо.


2

У меня была такая же проблема, когда я добавил Овина в существующий веб-проект. В конце концов я обнаружил, что проблема заключается в следующем в файле 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>

1
У меня был проект sitecore, и в моем файле web.config не было тега <remove assembly = * "/>. Но добавление <add assembly =" Microsoft.Owin.Host.SystemWeb "/> устранило мою проблему.
— burki

Спасибо @burki, из-за вашего комментария я заставил себя попробовать это решение, и оно сработало и для нас! Класс запуска Owin не запускался с момента обновления VS до 15.9.9.
— Дэвид

Спасибо вам большое! это исправило это, мне пришлось добавить следующее: <сборки> <удалить сборку = "*" /> <добавить сборку = "myapplication" /> <добавить сборку = "Microsoft.Owin.Host.SystemWeb" /> <добавить сборку = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / сборки>
— Трыкин

1

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


1

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

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

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

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


1

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

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

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

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

0

Я возился с большим количеством предложений на этот пост.

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

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

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

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

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


0

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

Проблема с моей стороны заключалась в том, чтобы поставить обратную косую черту в конец значения 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.

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

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


0

После преобразования библиотеки классов в проект веб-приложения я столкнулся с этим и стал упрямым. Оказалось, в моем .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\.

0

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

Я надеюсь, что это поможет!


0

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

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


0

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

using Microsoft.Owin.Hosting;

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

Как только вы сделаете этот вызов, вы увидите вызов StartupMethod () в отладчике


0

Я нашел следующую статью очень полезной:

https://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Existing-ASPNET-MVC-Application#MinimalCodeSummary

В моем случае мне пришлось установить следующее, прежде чем аутентификация Owin будет работать вместо аутентификации Windows:

<system.web>   
    <authentication mode="None" />   
<system.web>

0

Это сработало для меня:

добавить режим аутентификации = "Нет"

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
      <authentication mode="None" /><!--Use OWIN-->
  </system.web>

-3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.