OwinStartup không khai hỏa


350

Tôi đã có mã cấu hình OwinStartup hoạt động hoàn hảo và sau đó nó ngừng hoạt động. Thật không may, tôi không chắc chắn chính xác những gì tôi đã làm để khiến nó ngừng hoạt động và đang rất khó khăn để tìm ra nó.

Để chắc chắn rằng tôi có những điều cơ bản được bảo hiểm, tôi đã kiểm tra lại để đảm bảo rằng tôi có

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

thuộc tính được gán đúng và đảm bảo rằng tôi không có ứng dụng Đặt nợ: AutomaticAppStartup được đặt thành false nên tôi đã đặt một bộ thành đúng để an toàn vì trước đó không có gì.

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

Tôi cũng đã cố gắng đặc biệt gọi ra ứng dụng:

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

Trước khi nó ngừng hoạt động, tôi đã nâng cấp các gói Microsoft.Owin.Security NuGet lên 2.0.2, vì vậy tôi đã thử hoàn nguyên chúng thành 2.0.1 (đó là một nỗi đau) nhưng nó không thay đổi gì cả. Tôi đã cài đặt WebActivator trong dự án và đang sử dụng nó để khởi động những thứ khác nhưng tôi đã thử nghiệm nó trên một mẫu WebApplication mới và nó hoạt động ở đó vì vậy tôi không nghĩ đó là thủ phạm.

Tôi cũng đã thử xóa lớp Khởi động của mình và sử dụng Visual Studio để thêm một lớp mới bằng cách sử dụng loại Lớp khởi động OWIN trong Thêm mục mới và điều đó cũng không được gọi. Tiếp theo tôi đã thử thêm một lớp Startup thứ hai vì tôi biết nó sẽ ném một ngoại lệ nếu có nhiều thuộc tính OwinStartup được xác định, nhưng nó không ném bất kỳ ngoại lệ nào ở đó.

Không chắc là phải làm cái gì nữa. Có suy nghĩ gì không?

Cập nhật

Hóa ra Resharper đã xóa tham chiếu đến Microsoft.Owin.Host.SystemWeb khi tôi sử dụng nó để xóa các tham chiếu không sử dụng.


37
Bạn có cài đặt gói Microsoft.Owin.Host.Systemweb trong ứng dụng này không. Hãy chắc chắn rằng dll này cũng là một phần của thư mục bin?
Mitchuraj

1
Điều đó là vậy đó. Cám ơn rất nhiều. Tôi nghĩ những gì đã xảy ra là tôi đã sử dụng Resharper để xóa các tài liệu tham khảo không sử dụng tại một số điểm và nó không nghĩ rằng nó là cần thiết. Nếu bạn muốn đặt câu hỏi này làm câu trả lời, tôi chắc chắn sẽ đánh dấu nó là giải pháp. Cảm ơn đã giúp đỡ.
Jeff Treuting

2
Jeff, ReSharper đã xóa tham chiếu "không sử dụng" sang Microsoft.Owin.Host.Systemweb - bạn đang nói về "sử dụng" câu lệnh? Trong tập tin nào, Startup.cs?
vkelman

4
Tôi đã có chính xác vấn đề tương tự, chia sẻ lại đã xóa tham chiếu đến Microsoft.Owin.Host.SystemWeb. Tôi đã sửa nó bằng cách mở Cửa sổ Bảng điều khiển Trình quản lý Gói trong Visual Studio và chạy lệnh sau PM> Cập nhật-Gói-cài đặt Microsoft.Owin.Host.SystemWeb
Joe King

1
Như một bản cập nhật cho coment của @ JoeKing ở trên. Bảng điều khiển PM sẽ không cập nhật là "Không tìm thấy". Tôi đã phải đi cài đặt lại. PM> Cài đặt-Gói Microsoft.Owin.Host.SystemWeb
Morvael

Câu trả lời:


768

Hãy chắc chắn rằng bạn đã cài đặt Microsoft.Owin.Host.SystemWebgói trong dự án. Gói này là cần thiết để phát hiện khởi động trong các ứng dụng lưu trữ IIS. Để biết thêm thông tin bạn có thể tham khảo bài viết này .


4
Làm thế nào một người nào đó có thể khởi động Phát hiện Khởi động Owin theo chương trình trong thư viện được đóng gói / tiêu thụ, giả sử chúng ta có một nơi để gọi nó ( PreApplicationStartMethod ), mà không yêu cầu các tài liệu tham khảo trực tiếp này của Microsoft.Owin? Làm thế nào để chúng tôi đặc biệt khiêu khích Katana để gọi Startup.Configuration(IAppBuilder)?
Jason Kleban

7
Cố gắng tạo một ứng dụng từ đầu, mà không sử dụng mẫu MVC. Điều này đã kết thúc 2 giờ tuyệt vọng.
mkvlrn

1
Ngay khi tôi hét lên, người chia sẻ lại là kẻ giết người có năng suất lớn nhất, tôi đã gặp phải vấn đề này và không thể hiểu được trong một tuần tại sao web api ngừng hoạt động. Một bằng chứng chia sẻ lại đang giết chết năng suất của tôi.
Ivan G.

5
Yêu cầu tham chiếu một thư viện không thực sự được sử dụng trong quá trình biên dịch là một thiết kế tồi của Microsoft! Resharper đang làm hết sức mình nhưng không có vũ khí chống lại những quyết định tồi tệ như vậy.
ps_ttf

22
Kinh ngạc. Mỗi lần tôi thêm một tệp khởi động OWIN, tôi gặp vấn đề này. Và mỗi khi tôi quên tại sao, và kết thúc với câu trả lời này.
Tobias

70

Nếu bạn đã nâng cấp từ phiên bản MVC cũ hơn, hãy đảm bảo bạn không có

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

trong của bạn web.config. Nó sẽ ngăn chặn việc gọi logic khởi động.

Thay vào đó thay đổi nó thành true

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

Tôi nhận ra bạn đã đề cập đến vấn đề này nhưng đôi khi mọi người (như tôi) không đọc toàn bộ câu hỏi và chỉ nhảy vào câu trả lời ...

Ở đâu đó dọc theo dòng - khi tôi nâng cấp lên MVC 5, điều này đã được thêm vào và tôi chưa bao giờ thấy nó cho đến ngày hôm nay.


Có vấn đề tương tự khi triển khai lớp khởi động Owin trong một dự án mvc cũ. Chuyển đổi giá trị đã lừa!
Darxtar

Điều này hiệu quả với tôi Cảm ơn
Ghanshyam Singh

51

Câu trả lời thay thế cho vấn đề ban đầu được thảo luận - Owin "không nổ súng." Trong trường hợp của tôi, tôi đã dành hàng giờ để nghĩ rằng nó không bắn do không thể thiết lập một điểm dừng trong đó.

Khi gỡ lỗi khởi động OWIN trong studio hình ảnh

  • IIS Express - Chạy "F5" sẽ phá vỡ mã khởi động OWIN

  • IIS - Chạy "F5" sẽ không bị hỏng cho đến khi mã OWIN (và global.asax) được tải. Nếu bạn đính kèm vào W3P.exe, bạn sẽ có thể bước vào đó.


2
bạn đúng rồi! Đó chỉ là trình gỡ lỗi Visual Studio 2013 không dừng ở điểm dừng trong lớp Khởi động - trong khi chạy dưới IIS cục bộ. Kỳ dị.
vkelman

4
Bạn có thể nói rõ hơn về 'đính kèm với W3P.exe' không? Tôi có cùng một vấn đề về điểm dừng không bị tấn công với IIS nhưng bị tấn công với IISExpress. Tôi đã dừng ứng dụng, được đính kèm với w3wp.exe và sau đó duyệt qua localhost của tôi nhưng nó vẫn không bị ảnh hưởng. Tôi đã bỏ lỡ một cái gì đó?
Sean

Tôi cũng không thể đính kèm vào một phiên bản đang chạy của ứng dụng của mình, mặc dù tôi tin rằng tôi đã có thể làm như vậy trước đây. Tôi đã cố mở một ứng dụng trong trình duyệt, sau đó trong VS2013 để sử dụng "Gỡ lỗi-> Đính kèm vào quy trình", sau đó tải lại một trang trong trình duyệt. VS đã không dừng lại. Tôi biết rằng Khởi động OWIN đang thực thi: Tôi đặt một số đăng nhập vào nó cho mục đích gỡ lỗi. Nó giống như trở lại trong một thời đại đen tối của các bản in gỡ lỗi trung gian.
vkelman

2
một đồng nghiệp chỉ cho tôi thấy rằng trong iis nếu bạn nhấp đúp vào nhóm ứng dụng mặc định và thay đổi chế độ đường ống được quản lý thành cổ điển, trình gỡ lỗi sẽ bị hỏng khi khởi động. Tôi đã chạy sau đó và gặp lỗi khi ứng dụng phải chạy trong Tích hợp nên tôi phải thay đổi lại nhưng ít nhất có thể thấy rằng nó đã bị hỏng ở đó.
Matt Bodily

Có một vài điều ở đây. "W3wp.exe" dựa trên nhóm ứng dụng. bạn sẽ có thể gỡ lỗi global.asax và owin nếu ứng dụng của bạn không phải là ứng dụng đầu tiên bạn yêu cầu bắt đầu quá trình đó. tức là yêu cầu một ứng dụng khác trong nhóm ứng dụng, "Đính kèm vào w3wp.exe", sau đó yêu cầu ứng dụng bạn cố gắng gỡ lỗi.
Brett Caswell

26

Nếu bạn gặp khó khăn trong việc gỡ lỗi mã trong Startuplớp, tôi cũng đã gặp vấn đề này - hoặc tôi nghĩ rằng tôi đã làm. Mã đã được kích hoạt nhưng tôi tin rằng nó xảy ra trước khi trình gỡ lỗi được đính kèm để bạn không thể đặt điểm dừng trên mã và xem điều gì đang xảy ra.

Bạn có thể chứng minh điều này bằng cách ném một ngoại lệ trong Configurationphương thức của Startuplớp.


đây chính xác là những gì đang xảy ra Có giải pháp nào để lớp Startup khởi động sau khi trình gỡ lỗi đã đính kèm không?
Tom Schreck

Tôi có thể biết cách ném ngoại lệ trong phương thức Cấu hình không?
Karthikeyan

1
Đã thêm dòng này vào Startup.cs để chứng minh rằng nó đã được thực thi: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
RaoulRubin

1
@Karthikeyan - Thêm dòng này sau trước (không quan trọng) ConifureAuth (ứng dụng); dòng - ném Ngoại lệ mới ("Xin chào");
Francis Rodgers

Tạo dòng đầu tiên System.Threading.S ngủ (10_000) để nó sẽ đợi đủ lâu để trình gỡ lỗi đính kèm trước khi tiếp tục (điều chỉnh khi cần)
James Gray

16

GỢI Ý

Nếu gỡ lỗi không hoạt động, hãy thử sử dụng IIS Express hoặc thử phương pháp bên dưới cho IIS cục bộ

Sử dụng IIS cục bộ

Vì một số lý do, phương pháp này cho phép gỡ lỗi phương thức này:

  1. Yêu cầu một trang web
  2. Đính kèm vào quy trình w3wp.exe
  3. Chạm vào tệp web.config
  4. Yêu cầu một trang web

Mẹo thêm

Có lẽ làm điều này sẽ xóa một bộ đệm:

  1. Trong web.config thêm thuộc tính tối ưu hóa với giá trị sai

    <biên dịch debug = "true" ... tối ưu hóa Compompations = "false">

  2. Chạy trang web

  3. Hoàn tác thay đổi trong web.config

2
bật tắt cài đặt optimizeCompilations="false"hoạt động cho tôi
barsh 20/2/2017

Bạn tiết kiệm trong ngày của tôi! Tối ưu hóa công việc = "sai" cho tôi.
Vostrugin

Tối ưu hóa máy tính đã lưu ngày của tôi. Cảm ơn :)
Bogdan Stojanovic

13

Tôi đã có một vấn đề tương tự như vậy và xóa Tệp ASP.NET tạm thời đã sửa nó. Hy vọng điều này sẽ giúp được ai đó.


4
Chỉ để tham khảo, đây là một câu trả lời khác cung cấp thêm một chút chi tiết về nơi các tệp này được lưu trữ: stackoverflow.com/questions/16137457/
mẹo

1
Tôi đang chạy IIS EXPRESS và cửa sổ 8: xóa tại đây: C: \ Users \ Tên người dùng của bạn \ AppData \ Local \ Temp \ Tệp ASP.NET tạm thời \ vs
Sói xám

Cảm ơn, tôi nhận thấy câu trả lời này vì tôi đã gặp lỗi trước câu hỏi này, về điều gì đó đang khóa một tệp trong thư mục Tệp tạm thời ASP.NET
Elger Mensonides

Tôi đã vật lộn với điều này trong 1 ngày và cuối cùng điều này đã làm việc cho tôi. Sau khi xóa Temporary ASP.NET Filesnội dung thư mục và khởi động Owin đã được gọi.
Harsh Baid

11

Tôi đã từng gặp vấn đề tương tự. Gói Microsoft.Owin.Host.SystemWeb đã được cài đặt nhưng trong quá trình cài đặt, NuGet không thể thêm dll làm tài liệu tham khảo vì một số lý do. Hãy chắc chắn rằng dự án của bạn có tài liệu tham khảo đó. Nếu không bạn có thể thử cài đặt lại:

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

Tôi đã có một lỗi như dưới đây khi cài đặt lại nhưng bằng cách nào đó nó đã hoạt động:

Cuộc gọi hệ thống thất bại. (Ngoại lệ từ HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))


Tôi đã chiến đấu với điều này trong một thời gian, và đây là điều đã khắc phục vấn đề của tôi. Tôi đã có tham chiếu nuget trong gói.config, nhưng csproj của tôi không có tham chiếu.
Zackary Geers

1
Trong trường hợp của tôi, tôi đã không cài đặt gói nào cả. Chạy gói cài đặt Microsoft.Owin.Host.SystemWeb đã giải quyết vấn đề của tôi. Cảm ơn đã gợi ý.
J. Horn

2

Trong trường hợp của tôi, nhóm ứng dụng IIS không được đặt thành v4. Đó là v2.

Đã thay đổi AppPool thành v4 và mọi thứ đều ổn.


2

Tôi gặp vấn đề tương tự khi tôi thêm Owin vào một dự án web hiện có. Cuối cùng tôi đã tìm thấy vấn đề là do các tệp sau trong tệp web.config.

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

   ...

</assemblies>

Việc gỡ bỏ assembly = "*" đã gây ra sự cố. Khi tôi xóa dòng này, mã khởi động Owin đã chạy. Cuối cùng tôi thay đổi nó thành như sau và nó hoạt động hoàn hảo

<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
Tôi đã có một dự án sitecore và trong tệp web.config của tôi, không có thẻ <remove assembly = * "/>. Nhưng việc thêm <add assembly =" Microsoft.Owin.Host.SystemWeb "/> đã khắc phục sự cố của tôi.
burki

Cảm ơn @burki, vì nhận xét của bạn, tôi buộc mình phải thử giải pháp này và nó cũng có hiệu quả với chúng tôi! Lớp khởi động Owin không khai hỏa kể từ khi cập nhật VS lên 15.9.9.
David

cảm ơn bạn rất nhiều! cái này đã sửa nó, tôi phải thêm follwing: <assembly> <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" /> < / hội đồng>
trykyn

1

Trong trường hợp của tôi, đường dẫn đầu ra của trang web của tôi bị thay đổi bởi ai đó, IIS Express thậm chí không tải OWIN và lớp thiết lập sẽ không bị ảnh hưởng. Sau khi tôi đặt đường dẫn đầu ra là "bin \", nó hoạt động tốt.


1

Trong trường hợp của tôi, gói Microsoft.Owin.Host.SystemWeb này có trong dự án.

Nhưng bên dưới hai thẻ không có trong web.config.

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

Sau khi thêm chúng, nó hoạt động trơn tru.


1

Trong trường hợp của tôi, web.config của tôi đã có

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

Để buộc nó rơi trở lại Owin, tôi cần nó

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

0

Tôi đã nhầm lẫn với rất nhiều lời đề nghị về bài đăng này.

Tôi đã có những điều sau đây nhưng vẫn không thể hạ cánh trên một điểm dừng. Ném một ngoại lệ chứng minh mã đã được nhập.

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

Cuối cùng vì tuyệt vọng, tôi đã xem các thuộc tính của dự án-> và sau đó trong phần WEB tôi cũng đã kiểm tra hộp kiểm NATIVE CODE (ASP.NET đã được kiểm tra rồi).

Điều đó cuối cùng đã sửa nó cho tôi.

Lưu ý: Tôi đang sử dụng Visual Studio 2017 Professional.


0

Tôi không chắc liệu điều này có còn giúp được ai đó không, nhưng tôi đã thực hiện tất cả các giải pháp ở trên (và từ một số bài đăng khác) nhưng không có kết quả.

Điều đã khắc phục vấn đề ở phần cuối của tôi là đặt dấu gạch chéo ngược đến cuối giá trị RedirectUri trong web.config (thật điên rồ, tôi biết!). RedirectUri là một tham số trong UseOpenIdConnectAuthentication.

Vì vậy, thay vì:

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

Làm cái này:

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

Và cũng cập nhật URL trả lời trên Cài đặt ứng dụng Azure.

Điều đó bằng cách nào đó đã khiến Startup chạy như mong đợi (có thể đã xóa một số bộ đệm) và các điểm dừng hiện đang kích hoạt.

FYI. Tôi đã lập mô hình mã của mình từ đây: https://github.com/microsoftgraph/aspnet-connect-sample


0

Sau khi chuyển đổi một thư viện lớp thành Dự án ứng dụng web , tôi gặp phải vấn đề này và trở nên bướng bỉnh. Hóa ra, trong .csProjtập tin của tôi , tôi đã có điều này:

<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>
  • do đó, xây dựng các dll khác nhau thành thư mục con của thư mục bin (mà ifc. sẽ không hoạt động). Giải pháp là thay đổi cả nội dung văn bản OutputPaththành chỉ bin\.

0

Đối với tôi đó là vì họ không ở trong cùng một không gian tên. Sau khi tôi xóa AppStart của mình khỏi "project.Startup.AppStart" và để cả hai Startup.cs và Startup.Auth.cs với không gian tên "project.Startup", mọi thứ đã hoạt động trở lại hoàn hảo.

Tôi hy vọng nó sẽ giúp!


0

Nếu bạn gặp vấn đề này với lưu trữ IIS, nhưng không phải khi gỡ lỗi F5, hãy thử tạo một ứng dụng mới trong IIS.

CÁi này đã sửa nó giúp tôi. (windows 10) Cuối cùng, tôi đã xóa ứng dụng IIS "xấu" và tạo lại một ứng dụng giống hệt có cùng tên.


0

Tôi nghĩ điều mà một số người đã cố gắng đạt được ở trên là nếu bạn muốn lập trình làm cho máy chủ OWIN của bạn "trở nên sống động", bạn sẽ gọi một cái gì đó như thế này:

using Microsoft.Owin.Hosting;

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

Khi bạn thực hiện cuộc gọi này, bạn sẽ thấy lệnh gọi StartupMethod () trong trình gỡ lỗi



0

Điều này làm việc cho tôi:

thêm chế độ xác thực = "Không"

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

-3

Đầu tiên thêm Lớp xác thực OWIN và sau đó bật OWIN: AutomaticAppStartup trong web.config của bạn như Bây giờ nó sẽ bắn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.