OwinStartup設定コードが完璧に機能していたのに、機能しなくなりました。残念ながら、私はそれが機能しなくなるようにするために何をしたのか正確にはわからないし、それを理解するのに本当に苦労しています。
私が基本をカバーしていることを確認するために、私は私が持っていることを確認するためにチェックを2倍にしました
[Assembly:OwinStartup(typeof(WebApplication.Startup))]
属性が正しく割り当てられ、owin:AutomaticAppStartupのappSettingがfalseに設定されていないことを確認したため、安全性を確保するために1つを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テンプレートでそれをテストしましたが、問題はないと思います。
私はまた私のStartupクラスを削除し、Add New ItemのOWIN Startup Classタイプを使って新しいものを追加するためにVisual Studioを使ってみました、そしてそれはどちらも呼ばれませんでした。次に、2つ以上のOwinStartup属性が定義されていると例外がスローされることがわかっているので、2つ目のStartupクラスを追加してみましたが、例外はスローされません。
他に何を試すべきかわからない。何かご意見は?
更新
未使用の参照を削除するためにResharperを使用したときに、ResharperがMicrosoft.Owin.Host.SystemWebへの参照を削除したことがわかりました。
プロジェクトにMicrosoft.Owin.Host.SystemWeb
パッケージがインストールされていることを確認してください。このパッケージはIISホスト型アプリケーションの起動検出に必要です。詳細については this articleを参照してください。
以前のバージョンのMVCからアップグレードした場合は、インストールしていないことを確認してください。
<add key="owin:AutomaticAppStartup" value="false" />
あなたのweb.config
に。起動ロジックの呼び出しを抑制します。
代わりにtrue
に変更してください。
<add key="owin:AutomaticAppStartup" value="true" />
私はあなたがすでにこれについて言及していることを認識します、しかし時々人々(私のような)は全体の質問を読まないで単に答えに飛びます...
私は、MVC 5にアップグレードしたときにこれを追加し、今日までそれを見たことがありませんでした。
議論された最初の問題に対する代替の答え - Owinは「発砲しない」。私の場合は、ブレークポイントを設定できないために時間がかかっていないと考えました。
ビジュアルスタジオでOWINスタートアップをデバッグするとき
IIS Express - "F5"を実行するとOWINスタートアップコードが壊れる
IIS - "F5"を実行しても、OWIN(およびglobal.asax)コードが読み込まれるまで中断しません。あなたがW3P.exeにアタッチすればあなたはそれにステップインすることができるでしょう。
Startup
クラスのコードをデバッグするのに問題があるなら、私もこの問題を抱えています - または私はそうしたと思いました。コードは起動しましたが、デバッガがアタッチされる前に発生したため、コードにブレークポイントを設定して何が起こっているのかを確認することはできません。
これを証明するには、Configuration
クラスのStartup
メソッドに例外をスローします。
デバッグのヒント
デバッグがうまくいかない場合はIIS Expressを使うかローカルIISで以下の方法を試してください。
ローカルIISを使用する
何らかの理由で、このメソッドはこのメソッドのデバッグを有効にします。
追加のヒント
多分これをすることはキャッシュをフラッシュするでしょう:
Web.configで、false値を指定してoptimizeCompilations属性を追加します。
<compilation debug = "true" ... optimizeCompilations = "false">
サイトを実行
私はこれと同様の問題を抱えていて、Temporary ASP.NET Filesをクリアしてそれを修正しました。これが誰かに役立つことを願っています。
私は同じ問題を抱えていました。 Microsoft.Owin.Host.SystemWebパッケージはインストールされましたが、インストール中にNuGetは何らかの理由でDLLを参照として追加できませんでした。プロジェクトにその参照があることを確認してください。そうでない場合は、再インストールしてみてください。
update-package Microsoft.Owin.Host.SystemWeb -reinstall
私は再インストール時に以下のようなエラーがありましたが、どういうわけかそれはうまくいきました:
システムコールが失敗しました。 (HRESULTからの例外:0x80010100(RPC_E_SYS_CALL_FAILED))
私の場合、IISアプリケーションプールはv4に設定されていませんでした。それはv2でした。
AppPoolをv4に変更しました。すべて問題ありませんでした。
既存のWebプロジェクトにOwinを追加したときも同じ問題がありました。私は結局のところ問題がweb.configファイルの次のせいであることがわかった。
<assemblies>
<remove Assembly="*" />
<add Assembly="System.Web.Mvc" />
<add Assembly="System.Web.WebPages" />
...
</assemblies>
削除Assembly = "*"が問題の原因でした。この行を削除すると、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パッケージはプロジェクト内にあります。
しかし、以下の2つのタグはweb.configには存在しません。
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />
それらを追加した後、それはスムーズに機能します。
私の場合は、私のWebサイトの出力パスが誰かによって変更されていて、IIS ExpressがOWINをロードしていなくても、セットアップクラスは当然ヒットしません。出力パスを "bin \"に設定した後は、うまく機能します。
私の場合、私のweb.configは
<authorization>
<allow users="?" />
</authorization>
それをOwinに強制的にフォールバックさせるためには、
<authorization>
<deny users="*" />
</authorization>
クラスライブラリをWebアプリケーションプロジェクトに変換した後 、私はこれに遭遇し、頑固になりました。結局、私の.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>
OutputPath
の両方のtext-contentsをちょうどbin\
に変更することでした。OWINサーバをプログラム的に「実現」させるには、次のようなものを呼び出すことになるでしょう。
using Microsoft.Owin.Hosting;
IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000");
// Start Accepting HTTP via all interfaces on port 5000
この呼び出しを行うと、StartupMethod()の呼び出しがデバッガで起動します。
私にとっては、それらが同じ名前空間にないためです。 "project.Startup.AppStart"からAppStartを削除し、それらに "project.Startup"名前空間を持つStartup.csとStartup.Auth.csの両方を設定した後、すべてが問題なく動作しました。
お役に立てば幸いです。
私はこの記事に関するたくさんの提案と戸惑いました。
私は以下を持っていましたが、それでもブレークポイントに着陸することができませんでした。例外をスローしてコードが入力されたことを証明しました。
<appSettings>
...
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>
最後に必死になってプロジェクト - >プロパティを見て、それからウェブセクションの下で私もNATIVE CODEチェックボックスをチェックしました(ASP.NETはすでにチェックされているはずです)。
これでようやく修正できました。
注:私はVisual Studio 2017 Professionalを使用しています。
これがまだ誰かに役立つかどうかはわかりませんが、上記の(および他の投稿からの)解決策はすべて役に立ちました。
私が最後にこの問題を修正したのは、web.configのRedirectUri値の最後にバックスラッシュを付けることでした(私は知っています)。 RedirectUriはUseOpenIdConnectAuthenticationのパラメータです。
だから、代わりに:
<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />
これを行う:
<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />
また、Azureアプリ設定の返信URLも更新しました。
それがどういうわけかStartupを期待通りに実行するようにし(おそらくキャッシュをクリアしました)、ブレークポイントが起動しています。
ちなみに。ここからコードをモデリングしていました。 https://github.com/microsoftgraph/aspnet-connect-sample
IISホスティングでこの問題が発生しているがF5デバッグ中には発生していない場合は、IISで新しいアプリケーションを作成してみてください。
これで解決しました。 (Windows 10)最後に、私は "bad" IISアプリケーションを削除し、同じ名前の同じものを作り直しました。