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.