OwinStartup не стріляє


350

Я мав ідеально працювати код конфігурації OwinStartup, а потім він перестав працювати. На жаль, я не впевнений, що саме я зробив, щоб змусити його перестати працювати, і мені дуже важко розгадати це.

Щоб переконатися, що я покрив основи, я подвійно перевірив, щоб переконатися, що я маю

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

атрибут присвоєний належним чином і переконався, що у мене немає програми Налаштування для 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 у Add New Item, і це також не викликається. Далі я спробував додати другий клас автозавантаження, оскільки знаю, що це викине виключення, якщо визначено більше одного атрибута 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
У мене була точно така ж проблема, resharper видалив посилання на Microsoft.Owin.Host.SystemWeb. Я виправив це, відкривши вікно консолі диспетчера пакунків у Visual Studio і запустивши таку команду PM> Update-Package -перевстановити Microsoft.Owin.Host.SystemWeb
Joe King

1
Як оновлення коментаря до @ JoeKing вище. PM Console не оновлюється як "Не знайдено". Мені довелося піти на перевстановлення. PM> Install-Package Microsoft.Owin.Host.SystemWeb
Morvael

Відповіді:


768

Переконайтеся, що ви встановили Microsoft.Owin.Host.SystemWebпакет у проекті. Цей пакет необхідний для виявлення запуску в розміщених програмах IIS. Для отримання додаткової інформації ви можете звернутися до цієї статті .


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

7
Спроба створити додаток з нуля, не використовуючи шаблон MVC. Це закінчилося 2 години відчаю.
mkvlrn

1
Якраз тоді, коли я кричав, що переосмислювач - це найбільший вбивця продуктивності, у мене виникла ця проблема, і я не міг зрозуміти тиждень, чому веб-api перестала працювати. Ще одне підтвердження перегляду вбиває мою продуктивність.
Іван Григорович

5
Потрібна посилання на бібліотеку, яка насправді не використовується під час компіляції - це погана конструкція Microsoft! Resharper робить все можливе, але немає зброї проти таких поганих рішень.
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. Переключення значення зробило трюк!
Даркстар

Це працює для мене Спасибі
Ghanshyam Singh

51

Альтернативна відповідь на первісну проблему, яку обговорювали - Оуін "не стріляв". У моєму випадку я витратив години, думаючи, що це не стріляв через те, що не вдалося встановити в ньому точку перелому.

При налагодженні запуску OWIN у візуальній студії

  • IIS Express - Запуск "F5" порушиться при запуску коду OWIN

  • IIS - Запуск "F5" не порушиться, поки не буде завантажений код OWIN (і global.asax). Якщо ви приєднаєтесь до W3P.exe, ви зможете вступити в нього.


2
ти правий! Просто налагоджувач Visual Studio 2013 не зупиняється на точці злому всередині класу Startup - під час роботи під локальним IIS. Дивно.
vkelman

4
Чи можете ви детальніше розповісти про "додавання до W3P.exe"? У мене ж проблема з точкою розриву не потрапляє під IIS, але потрапляє з IISExpress. Я зупинив додаток, приєднав його до w3wp.exe, а потім переглянув мій localhost, але все ще не потрапляє. Я щось пропустив?
Шон

Я також не можу приєднатися до запущеного примірника свого додатка, хоча я вважаю, що міг це зробити раніше. Я спробував відкрити додаток у браузері, потім у VS2013 використати "Налагодження-> Приєднати до обробки", а потім перезавантажити сторінку у браузері. VS не зупинився. Я знаю, що OWIN Startup виконується: я вкладаю в нього деякі дані для цілей налагодження. Це як у темну епоху проміжних налагоджувальних відбитків.
vkelman

2
співробітник просто показав мені, що в iis, якщо двічі клацнути пул додатків за замовчуванням і змінити режим керованого конвеєра на класичний, налагоджувач порушиться при запуску. Я побіг після цього і отримав помилку, сказавши, що додаток потрібно запустити в Integrated, тому я повинен був змінити його назад, але, принаймні, міг побачити, що він там ламається.
Метт Боділі

Тут є кілька речей. "w3wp.exe" заснований на пулі додатків. ви повинні мати змогу налагоджувати файл global.asax та Owin, якщо ваша програма не є першою заявкою, яку ви запитуєте, що запускає цей процес. тобто запитайте іншу програму в пулі додатків, "Приєднати до w3wp.exe", а потім надішліть заявку додатку, що намагається налагодити.
Бретт Касуелл

26

Якщо у вас виникають проблеми з налагодженням коду в Startupкласі, у мене також була ця проблема - або я думав, що це зробив. Код спрацьовував, але я вважаю, що це відбувається до того, як налагоджувач приєднається, тому ви не можете встановити точки проходу на коді і подивитися, що відбувається.

Ви можете довести це, кинувши виняток у Configurationметоді Startupкласу.


саме це і відбувається. Чи є рішення отримати клас запуску після запуску налагоджувача?
Том Шрек

Чи можу я знати, як кинути виняток у методі конфігурації?
Картікеян

1
Додано цей рядок до Startup.cs, щоб довести, що він виконаний: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
РаулРубін

1
@Karthikeyan - додайте цей рядок після раніше (не має значення) ConifureAuth (додаток); рядок - кинути новий виняток ("Привіт");
Френсіс Роджерс

Зробіть перший рядок System.Threading.Sleep (10_000), щоб він зачекав досить довго, щоб налагоджувач приєднався, перш ніж продовжувати (відрегулювати за потребою)
James Grey

16

ПОРАДИ ДЕГУВАННЯ

Якщо налагодження не працює, спробуйте скористатися IIS Express або спробуйте наведений нижче метод для локального IIS

Використання локальних IIS

Чомусь цей метод дозволяє налагоджувати цей метод:

  1. Запит веб-сторінки
  2. Додайте до w3wp.exe процес
  3. Торкніться файлу web.config
  4. Запит веб-сторінки

Додатковий наконечник

Можливо, це змиє кеш:

  1. У web.config додайте атрибут optimizeCompilations з помилковим значенням

    <компіляція налагодження = "правда" ... optimizeCompilations = "false">

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

  3. Скасуйте зміну в web.config

2
перемикання налаштувань optimizeCompilations="false"працює для мене
barh

Ти врятуєш мій день! optimizeCompilations = "помилкова" робота для мене.
Востругін

optimizeCompilations врятував мій день. Дякую :)
Богдан Стоянович

13

У мене була схожа проблема з цим і очищення тимчасових файлів ASP.NET виправлено. Сподіваюся, що це комусь допоможе.


4
Для довідки, ось ще одна відповідь, яка дає трохи детальніше про те, де зберігаються ці файли: stackoverflow.com/questions/16137457/…
Сем Сторі,

1
Я запускаю IIS EXPRESS та вікно 8: видаліть тут: C: \ Користувачі \ Ваше ім'я користувача \ AppData \ Місцеві \ Темп \ Тимчасові файли ASP.NET \ vs
Сірий Вовк

Дякую, я помітив цю відповідь, тому що я помилився перед цим про те, що щось заблокувало файл у папці Тимчасові файли ASP.NET
помилився

Я боровся з цим протягом 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))


Я деякий час боровся з цим, і саме це вирішило мою проблему. У мене був чіткий посилання у пакетах.config, але мій csproj не мав посилання.
Zackary Geers

1
У моєму випадку пакет взагалі не був встановлений. Запуск встановлення пакета Microsoft.Owin.Host.SystemWeb вирішив мою проблему. Дякую за підказку.
Дж. Горн

2

У моєму випадку пул додатків IIS не був встановлений на v4. Це було v2.

Змінив AppPool на v4 і все було гаразд.


2

У мене була така ж проблема, коли я додав 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>

1
У мене був проект webcore, і в моєму файлі web.config не було тегу <delete Assembly = * "/>. Але додавання <add Assembly =" Microsoft.Owin.Host.SystemWeb "/> вирішило мою проблему.
burki

Дякую @burki, через твій коментар я змусив себе спробувати це рішення, і воно спрацювало і для нас! Клас запуску Owin не запускався з моменту оновлення VS до 15.9.9.
Девід

Дуже дякую! це виправлено, мені довелося додати наступне: <assemblies> <delete Assembly = "*" /> <add Assembly = "myapplication" /> <add Assembly = "Microsoft.Owin.Host.SystemWeb" /> <Додати збірку = "Microsoft.Owin.Security" /> <додати збірку = "System.Web.Mvc" /> <додати збірку = "System.Web.WebPages" /> <додати збірку = "System.Web.Helpers" /> < / асамблеї>
trykyn

1

У моєму випадку вихідний шлях мого веб-сайту хтось змінює, IIS Express навіть не завантажує OWIN, і клас налаштування, звичайно, не потрапить. Після того як я встановив вихідний шлях як "бін \", він працює добре.


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>

Нарешті, з відчаю я подивився на властивості project->, а потім у розділі 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.

Це якось змусило Startup працювати так, як очікувалося (ймовірно, очистив деякий кеш-пам'ять), і точки прориву тепер запускаються.

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 Auth, а потім увімкніть OWIN: AutomaticAppStartup у своєму веб-файлі, як Тепер він буде стріляти

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.