OwinStartup tidak menembak


350

Saya memiliki kode konfigurasi OwinStartup yang bekerja dengan sempurna dan kemudian berhenti bekerja. Sayangnya saya tidak yakin persis apa yang saya lakukan untuk menghentikannya dan saya mengalami kesulitan untuk mengetahuinya.

Untuk memastikan saya memiliki dasar-dasar yang dicakup, saya menggandakan untuk memastikan saya memiliki

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

atribut ditugaskan dengan benar dan memastikan bahwa saya tidak memiliki pengaturan aplikasi untuk owin: AutomaticAppStartup yang disetel ke false, jadi saya membuat satu set ke true agar aman karena tidak ada apa pun di sana sebelumnya.

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

Saya juga mencoba secara khusus memanggil pengaturan aplikasi:

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

Sebelum berhenti berfungsi, saya meningkatkan paket Microsoft.Owin.Security NuGet ke 2.0.2, jadi saya mencoba mengembalikannya ke 2.0.1 (itu menyebalkan) tetapi tidak mengubah apa pun. Saya memiliki WebActivator yang diinstal pada proyek dan saya menggunakannya untuk mem-bootstrap hal-hal lain, tetapi saya telah mengujinya pada template WebApplication yang baru dan berfungsi di sana sehingga saya tidak berpikir itu penyebabnya.

Saya juga mencoba menghapus kelas Startup saya dan menggunakan Visual Studio untuk menambahkan yang baru menggunakan tipe OWIN Startup Class di Add New Item dan itu tidak dipanggil juga. Selanjutnya saya mencoba menambahkan kelas Startup kedua karena saya tahu itu akan melempar pengecualian jika ada lebih dari satu atribut OwinStartup yang ditentukan, tetapi tidak melempar pengecualian di sana.

Tidak yakin harus mencoba apa lagi. Adakah pikiran?

Memperbarui

Ternyata Resharper menghapus referensi ke Microsoft.Owin.Host.SystemWeb ketika saya menggunakannya untuk menghapus referensi yang tidak digunakan.


37
Apakah Anda memiliki paket Microsoft.Owin.Host.Systemweb diinstal dalam aplikasi ini. Pastikan dll ini juga merupakan bagian dari folder bin?
Praburaj

1
Itu dia. Terima kasih banyak. Saya pikir yang terjadi adalah saya menggunakan Resharper untuk menghapus referensi yang tidak terpakai di beberapa titik dan tidak berpikir bahwa diperlukan. Jika Anda ingin menempatkan ini sebagai jawaban, saya pasti akan menandainya sebagai solusi. Terima kasih untuk bantuannya.
Jeff Treuting

2
Jeff, ReSharper menghapus referensi "tidak digunakan" untuk Microsoft.Owin.Host.Systemweb - apakah Anda berbicara tentang pernyataan "using"? Di file mana, Startup.cs?
vkelman

4
Saya memiliki masalah yang persis sama, resharper menghapus referensi ke Microsoft.Owin.Host.SystemWeb. Saya memperbaikinya dengan membuka Package Console Window di Visual Studio dan menjalankan perintah berikut PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King

1
Sebagai pembaruan pada coment @ JoeKing di atas. PM Console tidak akan memperbarui sebagai "Tidak ditemukan". Saya harus pergi untuk menginstal ulang. PM> Instal-Paket Microsoft.Owin.Host.SystemWeb
Morvael

Jawaban:


768

Pastikan Anda telah menginstal Microsoft.Owin.Host.SystemWebpaket di proyek. Paket ini diperlukan untuk deteksi startup di aplikasi yang di-host IIS. Untuk informasi lebih lanjut, Anda dapat merujuk ke artikel ini .


4
Bagaimana mungkin seseorang memulai Deteksi Permulaan Owin secara terprogram di dalam perpustakaan yang dikonsumsi / di-enkapsulasi, dengan asumsi kita memiliki tempat untuk menyebutnya ( PreApplicationStartMethod ), tanpa memerlukan referensi langsung dari barang-barang Microsoft.Owin ini? Bagaimana kita secara khusus memprovokasi Katana untuk menelepon Startup.Configuration(IAppBuilder)?
Jason Kleban

7
Mencoba membuat aplikasi dari awal, tanpa menggunakan template MVC. Keputusasaan ini berakhir 2 jam.
mkvlrn

1
Tepat ketika saya berteriak resharper adalah pembunuh produktivitas terbesar saya punya masalah ini dan tidak tahu selama seminggu mengapa api web berhenti bekerja. Bukti penyelamat lain adalah membunuh produktivitas saya.
Ivan G.

5
Membutuhkan referensi perpustakaan yang tidak benar-benar digunakan selama kompilasi adalah desain yang buruk oleh Microsoft! Resharper melakukan yang terbaik tetapi tidak ada senjata melawan keputusan buruk semacam itu.
ps_ttf

22
Luar biasa. Setiap kali saya menambahkan file startup OWIN, saya memiliki masalah ini. Dan setiap kali saya lupa mengapa, dan berakhir pada jawaban ini.
Tobias

70

Jika Anda telah memutakhirkan dari versi MVC yang lebih lama, pastikan Anda tidak memilikinya

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

di Anda web.config. Ini akan menekan memanggil logika startup.

Alih-alih mengubahnya menjadi true

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

Saya menyadari Anda sudah menyebutkan ini, tetapi kadang-kadang orang (seperti saya) tidak membaca seluruh pertanyaan dan hanya melompat ke jawabannya ...

Di suatu tempat di sepanjang garis - ketika saya meningkatkan ke MVC 5 ini ditambahkan dan saya tidak pernah melihatnya sampai hari ini.


Punya masalah yang sama ketika menerapkan kelas startup Owin di proyek MVC lama. Mengalihkan nilainya berhasil!
Darxtar

Ini bekerja untuk saya Terima kasih
Ghanshyam Singh

51

Jawaban alternatif untuk masalah awal yang dibahas - Owin "tidak menembak." Dalam kasus saya, saya menghabiskan berjam-jam berpikir itu tidak menembak karena tidak dapat menetapkan breakpoint di dalamnya.

Saat men-debug startup OWIN di studio visual

  • IIS Express - Menjalankan "F5" akan merusak kode startup OWIN

  • IIS - Menjalankan "F5" tidak akan pecah sampai setelah kode OWIN (dan global.asax) dimuat. Jika Anda melampirkan ke W3P.exe Anda akan dapat melangkah ke dalamnya.


2
kamu benar! Hanya saja debugger Visual Studio 2013 tidak berhenti pada break point di dalam kelas Startup - saat berjalan di bawah IIS lokal. Aneh.
vkelman

4
Bisakah Anda menguraikan 'melampirkan W3P.exe'? Saya memiliki masalah yang sama dengan breakpoint yang tidak terkena IIS tetapi dipukul dengan IISExpress. Saya telah menghentikan aplikasi, terpasang ke w3wp.exe dan kemudian melihat-lihat localhost saya tetapi tetap saja tidak terkena. Apakah saya melewatkan sesuatu?
Sean

Saya juga tidak bisa melampirkan instance aplikasi saya yang sedang berjalan, meskipun saya yakin saya bisa melakukannya sebelumnya. Saya mencoba membuka aplikasi di browser, kemudian di VS2013 untuk menggunakan "Debug-> Attach to Process", dan kemudian memuat ulang halaman di browser. VS tidak berhenti. Saya tahu bahwa OWIN Startup sedang dijalankan: Saya memasukkan beberapa logging ke dalamnya untuk tujuan debug. Ini seperti kembali di zaman kegelapan cetakan debugging menengah.
vkelman

2
seorang rekan kerja baru saja menunjukkan kepada saya bahwa di iis jika Anda mengklik dua kali pada kumpulan aplikasi default dan mengubah mode pipeline yang dikelola ke klasik, debugger akan rusak dalam startup. Saya berlari setelah itu dan mendapat kesalahan mengatakan aplikasi harus berjalan di Integrated jadi saya harus mengubahnya kembali tetapi setidaknya bisa melihat bahwa itu rusak di sana.
Matt Bodily

Ada beberapa hal di sini. "w3wp.exe" didasarkan pada kumpulan aplikasi. Anda harus dapat men-debug global.asax dan owin jika aplikasi Anda bukan aplikasi pertama yang Anda minta yang memulai proses itu. yaitu meminta aplikasi yang berbeda di kumpulan aplikasi, "Lampirkan ke w3wp.exe", dan kemudian minta aplikasi yang Anda coba debug.
Brett Caswell

26

Jika Anda mengalami masalah debug kode di Startupkelas, saya juga punya masalah ini - atau saya pikir saya punya. Kode telah diaktifkan tetapi saya percaya itu terjadi sebelum debugger telah terpasang sehingga Anda tidak dapat menetapkan breakpoint pada kode dan melihat apa yang terjadi.

Anda bisa membuktikan ini dengan melemparkan pengecualian dalam Configurationmetode Startupkelas.


inilah tepatnya yang terjadi. Apakah ada solusi untuk mengaktifkan kelas Startup setelah debugger terpasang?
Tom Schreck

Bolehkah saya tahu cara melempar pengecualian dalam metode Konfigurasi?
Karthikeyan

1
Menambahkan baris ini ke Startup.cs untuk membuktikan bahwa itu dieksekusi: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Mulai");
RaoulRubin

1
@Karthikeyan - Tambahkan baris ini setelah sebelumnya (tidak masalah) ConifureAuth (aplikasi); line - throw Exception baru ("Hello");
Francis Rodgers

Buat System baris pertama .Threading.Sleep (10_000) sehingga akan menunggu cukup lama untuk dilampirkan oleh debugger sebelum melanjutkan (sesuaikan seperlunya)
James Gray

16

TIPS MENGUNDANG

Jika debugging tidak berfungsi, coba gunakan IIS Express atau coba metode di bawah ini untuk IIS lokal

Menggunakan IIS lokal

Untuk beberapa alasan metode ini memungkinkan debugging metode ini:

  1. Minta halaman web
  2. Lampirkan ke proses w3wp.exe
  3. Sentuh file web.config
  4. Minta halaman web

Kiat ekstra

Mungkin melakukan ini akan membuka cache:

  1. Di web.config tambahkan atribut optimCompilations dengan nilai yang salah

    <kompilasi debug = "true" ... optimCompilations = "false">

  2. Jalankan situs

  3. Batalkan perubahan di web.config

2
mengubah pengaturan optimizeCompilations="false"bekerja untuk saya
barsh

Anda menghemat hari saya! optimCompilations = "false" bekerja untuk saya.
Vostrugin

optimalCompilations menyelamatkan hari saya. Terima kasih :)
Bogdan Stojanovic

13

Saya punya masalah serupa dengan ini dan membersihkan File ASP.NET Sementara memperbaikinya. Semoga ini bisa membantu seseorang.


4
Sekedar referensi, berikut ini jawaban lain yang memberikan sedikit detail tentang tempat penyimpanan file-file ini: stackoverflow.com/questions/16137457/…
Sam Storie

1
Saya menjalankan IIS EXPRESS dan jendela 8: hapus di sini: C: \ Users \ Nama Pengguna Anda \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs
Grey Wolf

Terima kasih, saya perhatikan jawaban ini karena saya memiliki kesalahan sebelum ini, tentang sesuatu mengunci file di folder Temporary ASP.NET Files
Elger Mensonides

Saya berjuang dengan ini selama 1 hari penuh dan akhirnya ini berhasil untuk saya. Setelah membersihkan Temporary ASP.NET Fileskonten folder dan Owin startup dipanggil.
Harsh Baid

11

Saya memiliki masalah yang sama. Paket Microsoft.Owin.Host.SystemWeb diinstal tetapi selama instalasi NuGet tidak dapat menambahkan dll sebagai referensi karena beberapa alasan. Pastikan proyek Anda memiliki referensi itu. Jika tidak, Anda dapat mencoba menginstal ulang:

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

Saya memiliki kesalahan seperti di bawah ini pada instal ulang tetapi entah bagaimana itu berhasil:

Panggilan sistem gagal. (Pengecualian dari HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))


Saya telah berjuang ini untuk sementara waktu, dan inilah yang memperbaiki masalah saya. Saya memiliki referensi nuget di packages.config, tetapi csproj saya tidak memiliki referensi.
Zackary Geers

1
Dalam kasus saya, saya tidak menginstal paket sama sekali. Menjalankan install-package Microsoft.Owin.Host.SystemWeb memecahkan masalah saya. Terima kasih atas petunjuknya.
J. Horn

2

Dalam kasus saya, kumpulan aplikasi IIS tidak diatur ke v4. Itu v2.

Mengubah AppPool ke v4 dan semuanya baik-baik saja.


2

Saya memiliki masalah yang sama ketika saya menambahkan Owin ke proyek web yang ada. Saya akhirnya menemukan masalah karena hal berikut dalam file web.config.

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

   ...

</assemblies>

Majelis hapus = "*" yang menyebabkan masalah. Ketika saya menghapus baris ini, kode startup Owin dijalankan. Saya akhirnya mengubahnya menjadi yang berikut dan itu bekerja dengan sempurna

<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
Saya punya proyek sitecore dan di file web.config saya, tidak ada tag <remove assembly = * "/>. Tetapi menambahkan <add assembly =" Microsoft.Owin.Host.SystemWeb "/> memperbaiki masalah saya.
burki

Terima kasih @burki, karena komentar Anda, saya memaksakan diri untuk mencoba solusi ini dan ternyata berhasil juga untuk kami! Kelas startup Owin tidak diaktifkan sejak pembaruan VS ke 15.9.9.
David

Terima kasih banyak! ini memperbaikinya, saya harus menambahkan follwing: <assemblies> <remove assembly = "*" /> <add assembly = "myapplication" /> <add assembly = "Microsoft.Owin.Host.SystemWeb" /> <add assembly = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / assemblies>
trykyn

1

Dalam kasus saya, jalur output situs web saya diubah oleh seseorang, IIS Express bahkan tidak memuat OWIN, dan kelas pengaturan tidak akan mengenai program. Setelah saya mengatur jalur output sebagai "bin \", ia bekerja dengan baik.


1

Dalam kasus saya paket Microsoft.Owin.Host.SystemWeb ini hadir dalam proyek ini.

Namun dua tag di bawah ini tidak ada di web.config.

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

setelah menambahkannya berfungsi dengan baik.


1

Dalam kasus saya, web.config saya punya

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

Untuk memaksanya jatuh kembali ke Owin, aku membutuhkannya

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

0

Saya mengacaukan banyak saran di posting ini.

Saya memiliki yang berikut tetapi masih tidak bisa mendarat di break point. Melempar pengecualian membuktikan kode itu dimasukkan.

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

Akhirnya karena putus asa saya melihat properti project->, dan kemudian di bawah bagian WEB saya juga memeriksa kotak centang NATIVE CODE (ASP.NET harus sudah diperiksa).

Itu akhirnya memperbaikinya untuk saya.

Catatan: Saya menggunakan Visual Studio 2017 Professional.


0

Saya tidak yakin apakah ini masih akan membantu seseorang, tetapi saya sudah melakukan semua solusi di atas (dan dari beberapa posting lainnya) tidak berhasil.

Apa yang memperbaiki masalah di ujung saya adalah meletakkan backslash ke akhir nilai RedirectUri di web.config (gila, saya tahu!). RedirectUri adalah parameter di UseOpenIdConnectAuthentication.

Jadi, alih-alih:

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

Melakukan hal ini:

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

Dan memperbarui URL Balas di Pengaturan Aplikasi Azure juga.

Entah bagaimana itu membuat Startup berjalan seperti yang diharapkan (mungkin membersihkan beberapa cache), dan breakpoints sekarang menyala.

FYI. Saya memodelkan kode saya dari sini: https://github.com/microsoftgraph/aspnet-connect-sample


0

Setelah mengkonversi perpustakaan kelas ke Proyek Aplikasi Web , saya berlari ke ini dan menjadi keras kepala. Ternyata, di .csProjfile saya , saya punya ini:

<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>
  • dengan demikian membangun berbagai dll menjadi subfolder dari folder-bin (yang ifc. tidak akan berfungsi). Solusi adalah mengubah kedua konten teks OutputPathmenjadi adil bin\.

0

Bagi saya itu karena mereka tidak berada dalam namespace yang sama. Setelah saya menghapus AppStart saya dari "project.Startup.AppStart" dan membiarkan keduanya Startup.cs dan Startup.Auth.cs dengan namespace "project.Startup", semuanya kembali berfungsi dengan sempurna.

Saya harap ini membantu!


0

Jika Anda melihat masalah ini dengan hosting IIS, tetapi tidak ketika debugging F5, coba buat aplikasi baru di IIS.

Ini memperbaikinya untuk saya. (windows 10) Pada akhirnya saya menghapus aplikasi IIS "buruk" dan menciptakan kembali yang identik dengan nama yang sama.


0

Saya pikir apa yang beberapa orang coba dapatkan di atas adalah bahwa jika Anda ingin membuat server OWIN Anda secara "hidup", Anda akan memanggil sesuatu seperti ini:

using Microsoft.Owin.Hosting;

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

Setelah Anda melakukan panggilan ini, Anda akan melihat panggilan ke StartupMethod () menyala di debugger



0

Ini bekerja untuk saya:

tambahkan mode autentikasi = "Tidak Ada"

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

-3

Pertama tambahkan OWIN Auth Class dan kemudian aktifkan OWIN: AutomaticAppStartup kunci di web.config Anda suka Sekarang akan menyala

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.