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, и он работает там, поэтому я не думаю, что это виновник.
Я также попытался удалить свой класс запуска и с помощью Visual Studio добавить новый, используя тип класса запуска OWIN в "Добавить новый элемент", который тоже не вызывается. Затем я попытался добавить второй класс Startup, поскольку я знаю, что он вызовет исключение, если определено более одного атрибута OwinStartup, но он не выдает там никаких исключений.
Не уверен, что еще попробовать. Какие-нибудь мысли?
Обновить
Оказывается, что Resharper удалил ссылку на Microsoft.Owin.Host.SystemWeb, когда я использовал ее для удаления неиспользуемых ссылок.
22 ответа
Убедитесь, что вы установили Microsoft.Owin.Host.SystemWeb
пакет в проекте. Этот пакет необходим для обнаружения запуска в приложениях, размещенных на IIS. Для получения дополнительной информации вы можете обратиться к этой статье.
Если вы обновили более старую версию MVC, убедитесь, что у вас нет
<add key="owin:AutomaticAppStartup" value="false" />
в вашем web.config
, Это подавит вызов логики запуска.
Вместо этого измените его на true
<add key="owin:AutomaticAppStartup" value="true" />
Я понимаю, что вы уже упоминали об этом, но иногда люди (как я) не читают весь вопрос и просто прыгают на ответы...
Где-то вдоль линии - когда я обновился до MVC 5, это было добавлено, и я никогда не видел его до сегодняшнего дня.
Альтернативный ответ на оригинальную обсуждаемую проблему - Оуин "не стреляет". В моем случае я часами думал, что это не стрельба из-за невозможности установить в нем точку останова.
При отладке запуска OWIN в visual studio
IIS Express - запуск "F5" приведет к сбою кода запуска OWIN
IIS - Запуск "F5" не прекратится до тех пор, пока не будет загружен код OWIN (и global.asax). Если вы присоединитесь к W3P.exe, вы сможете войти в него.
Если у вас возникли проблемы с отладкой кода в Startup
класс, у меня также была эта проблема - или я думал, что сделал. Код работал, но я полагаю, что это происходит до того, как отладчик подключился, поэтому вы не можете установить точки останова в коде и посмотреть, что происходит.
Вы можете доказать это, бросив исключение в Configuration
метод Startup
учебный класс.
СОВЕТЫ ОТЛАДКИ
Если отладка не работает, попробуйте использовать IIS Express или попробуйте метод ниже для локального IIS
Использование локального IIS
По некоторым причинам этот метод включает отладку этого метода:
- Заказать веб-страницу
- Присоединить к процессу w3wp.exe
- Нажмите файл web.config
- Заказать веб-страницу
Дополнительный совет
Может быть, это очистит кеш:
В web.config добавьте атрибут optimizeCompilations с ложным значением
Запустить сайт
- Отменить изменения в web.config
У меня была похожая проблема, и очистка временных файлов ASP.NET исправила ее. Надеюсь, это кому-нибудь поможет.
У меня такая же проблема. Пакет Microsoft.Owin.Host.SystemWeb был установлен, но во время установки по какой-то причине NuGet не смог добавить dll в качестве ссылки. Убедитесь, что ваш проект имеет эту ссылку. Если нет, вы можете попробовать переустановить:
update-package Microsoft.Owin.Host.SystemWeb -reinstall
У меня была ошибка, как показано ниже при переустановке, но как-то это сработало:
Системный вызов не выполнен. (Исключение из HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))
У меня была такая же проблема, когда я добавил Овина в существующий веб-проект. В конце концов я обнаружил, что проблема заключается в следующем в файле 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>
В моем случае этот пакет Microsoft.Owin.Host.SystemWeb присутствует в проекте.
Но ниже двух тегов нет в web.config.
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />
после их добавления все работает плавно.
Мне очень помогла следующая статья:
В моем случае мне пришлось установить следующее, прежде чем аутентификация Owin будет работать вместо аутентификации Windows:
<system.web>
<authentication mode="None" />
<system.web>
В моем случае пул приложений IIS не был установлен на v4. Это был v2.
Поменял AppPool на v4 и все было в порядке.
В моем случае мой web.config имел
<authorization>
<allow users="?" />
</authorization>
Чтобы заставить его вернуться к Оуэну, мне нужно было
<authorization>
<deny users="*" />
</authorization>
Это сработало для меня:
добавить режим аутентификации ="Нет"
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<authentication mode="None" /><!--Use OWIN-->
</system.web>
Я думаю, что некоторые люди пытались достичь вышеизложенного, что если вы хотите программно заставить свой OWIN-сервер "ожить", вы бы назвали что-то вроде этого:
using Microsoft.Owin.Hosting;
IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000");
// Start Accepting HTTP via all interfaces on port 5000
Как только вы сделаете этот вызов, вы увидите вызов StartupMethod() в отладчике
В моем случае путь вывода моего сайта кем-то изменился, IIS Express даже не загружает OWIN, и, конечно, класс установки не будет задействован. После того, как я установил путь вывода как "bin\", он работает хорошо.
Я не уверен, поможет ли это кому-то еще, но я выполнил все вышеизложенные решения (и некоторые другие сообщения) безрезультатно.
Что исправило проблему с моей стороны, так это добавление обратной косой черты в конец значения 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
Если вы видите эту проблему с хостингом IIS, но не при отладке F5, попробуйте создать новое приложение в IIS.
Это исправило это для меня. (Windows 10) В конце концов я удалил "плохое" приложение IIS и воссоздал идентичное приложение с тем же именем.
После преобразования библиотеки классов в проект веб-приложения я столкнулся с этим и стал упрямым. Оказалось, по моему .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\
,
Для меня это было потому, что они не в одном пространстве имен. После того, как я удалил свой AppStart из "project.Startup.AppStart" и позволил им обоим Startup.cs и Startup.Auth.cs с пространством имен "project.Startup", все вернулось к работе идеально.
Я надеюсь, что это поможет!
Если у вас есть несколько хостов, использующих одно и то же пространство имен в вашем решении, убедитесь, что они подключены к отдельному порту IISExpress (и удалите папку .vs и перезапустите vs).
Я возился с большим количеством предложений на этот пост.
Я имел следующее, но все еще не мог приземлиться на точку останова. Создание исключения подтвердило, что код вводится.
<appSettings>
...
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>
Наконец, в отчаянии я посмотрел на project->properties, а затем в разделе WEB я также установил флажок NATIVE CODE (ASP.NET уже должен быть проверен).
Это наконец исправило это для меня.
Примечание. Я использую Visual Studio 2017 Professional.
Сначала добавьте класс аутентификации OWIN, а затем включите ключ OWIN:AutomaticAppStartup в файле web.config, например Теперь будет стрелять