O OwinStartup não está disparando

350

Eu tinha o código de configuração OwinStartup funcionando perfeitamente e então ele parou de funcionar. Infelizmente, não sei exatamente o que fiz para fazê-lo parar de funcionar e estou tendo muita dificuldade para descobrir isso.

Para garantir que eu tenha o básico coberto, dobrei a verificação para ter certeza de que tenho o

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

atributo atribuído corretamente e certificou-se de que eu não tenho um appSetting para owin: AutomaticAppStartup que esteja definido como false, por isso fiz um conjunto como true para ser seguro, pois não havia nada antes.

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

Também tentei chamar especificamente o appSetting:

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

Antes que parasse de funcionar, atualizei os pacotes Microsoft.Owin.Security NuGet para a 2.0.2, então tentei revertê-los para a 2.0.1 (isso foi um problema), mas não mudou nada. Eu tenho o WebActivator instalado no projeto e estou usando isso para inicializar outras coisas, mas eu testei isso em um modelo WebApplication novo e ele funciona lá, então não acho que seja o culpado.

Também tentei remover minha classe de inicialização e usar o Visual Studio para adicionar uma nova usando o tipo de classe de inicialização OWIN em Adicionar novo item e isso também não está sendo chamado. Em seguida, tentei adicionar uma segunda classe de inicialização, pois sei que ela lançará uma exceção se houver mais de um atributo OwinStartup definido, mas ela não está lançando nenhuma exceção.

Não tenho certeza o que mais tentar. Alguma ideia?

Atualizar

Acontece que o Resharper removeu a referência ao Microsoft.Owin.Host.SystemWeb quando o usei para remover referências não utilizadas.

Jeff Treuting
fonte
37
Você tem o pacote Microsoft.Owin.Host.Systemweb instalado neste aplicativo. Verifique se essa dll também faz parte da pasta bin?
Praburaj
11
Foi isso. Muito obrigado. Acho que o que aconteceu foi que usei o Resharper para remover referências não utilizadas em algum momento e não acho que seja necessário. Se você quiser colocar isso como resposta, eu definitivamente o marcarei como a solução. Obrigado pela ajuda.
Jeff Treuting
2
Jeff, ReSharper removeu a referência "não utilizada" para o Microsoft.Owin.Host.Systemweb - você está falando sobre a declaração "using"? Em qual arquivo, Startup.cs?
vkelman
4
Eu tive exatamente o mesmo problema, o resharper removeu a referência ao Microsoft.Owin.Host.SystemWeb. Eu fixo-lo, abrindo o Console janela Package Manager no Visual Studio e executando o seguinte PM command> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King
11
Como uma atualização do comentário acima de @ JoeKing. O PM Console não atualiza como "Não encontrado". Eu tive que ir para uma reinstalação. PM> Pacote de instalação Microsoft.Owin.Host.SystemWeb
Morvael

Respostas:

768

Verifique se você instalou o Microsoft.Owin.Host.SystemWebpacote no projeto. Este pacote é necessário para a detecção de inicialização em aplicativos hospedados no IIS. Para mais informações, você pode consultar este artigo .

Praburaj
fonte
4
Como alguém pode iniciar a Detecção de Inicialização Owin programaticamente em uma biblioteca consumida / encapsulando owin, supondo que tenhamos um lugar para chamá-la ( PreApplicationStartMethod ), sem exigir essas referências diretas do material Microsoft.Owin? Como provocamos especificamente Katana a ligar Startup.Configuration(IAppBuilder)?
precisa saber é o seguinte
7
Tentando criar um aplicativo do zero, sem usar o modelo MVC. Isso terminou duas horas em desespero.
Mkvlrn
11
Apenas quando eu estava gritando resharper é o maior assassino de produtividade, eu tive esse problema e não consegui descobrir por uma semana por que a API da web parou de funcionar. Outro revisor de provas está matando minha produtividade.
Ivan G.
5
Exigir referência a uma biblioteca que não é realmente usada durante a compilação é um design ruim da Microsoft! Re-compartilhador está fazendo o seu melhor, mas não há arma contra essas decisões ruins.
ps_ttf 15/07
22
Surpreendente. Sempre que adiciono um arquivo de inicialização OWIN, tenho esse problema. E toda vez que esqueço o motivo e acabo com essa resposta.
Tobias
70

Se você atualizou de uma versão mais antiga do MVC, verifique se não possui

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

no seu web.config. Ele suprimirá a chamada da lógica de inicialização.

Em vez disso, altere-o para true

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

Sei que você já mencionou isso, mas às vezes as pessoas (como eu) não leem a pergunta toda e apenas pulam para as respostas ...

Em algum lugar ao longo da linha - quando eu atualizei para o MVC 5, isso foi adicionado e eu nunca o vi até hoje.

Simon_Weaver
fonte
Teve o mesmo problema ao implementar uma classe de inicialização Owin em um projeto mvc antigo. Mudar o valor fez o truque!
Darxtar 11/08/16
Isso funciona para mim Obrigado
Ghanshyam Singh
51

Resposta alternativa ao problema original discutido - Owin "não está disparando". No meu caso, passei horas pensando que não estava disparando devido à impossibilidade de definir um ponto de interrupção nele.

Ao depurar a inicialização do OWIN no visual studio

  • IIS Express - A execução de "F5" será interrompida no código de inicialização do OWIN

  • IIS - A execução de "F5" não será interrompida até que o código OWIN (e global.asax) seja carregado. Se você se conectar ao W3P.exe, poderá entrar nele.

Aaron Sherman
fonte
2
você está certo! É apenas o depurador do Visual Studio 2013 que não para em um ponto de interrupção na classe Inicialização - enquanto executa no IIS local. Esquisito.
vkelman
4
Você pode elaborar sobre o 'anexar ao W3P.exe'? Eu tenho o mesmo problema do ponto de interrupção não sendo atingido pelo IIS, mas é atingido pelo IISExpress. Parei o aplicativo, anexado ao w3wp.exe e depois naveguei para o meu host local, mas ainda não está sendo atingido. Perdi alguma coisa?
21413 Sean
Também não posso me conectar a uma instância em execução do meu aplicativo, apesar de acreditar que já o fiz antes. Tentei abrir um aplicativo em um navegador e, em seguida, no VS2013, para usar "Debug-> Attach to Process" e, em seguida, recarregar uma página em um navegador. VS não parou. Eu sei que a inicialização do OWIN está em execução: coloquei alguns log para fins de depuração. É como voltar a uma era sombria de impressões intermediárias de depuração.
vkelman
2
um colega de trabalho acabou de me mostrar que, no iis, se você clicar duas vezes no pool de aplicativos padrão e alterar o modo de pipeline gerenciado para clássico, o depurador será interrompido na inicialização. Eu corri depois disso e recebi um erro dizendo que o aplicativo tinha que ser executado no Integrated, então tive que alterá-lo novamente, mas pelo menos consegui ver que estava quebrando lá.
precisa
Há algumas coisas aqui. "w3wp.exe" é baseado no pool de aplicativos. você poderá depurar global.asax e owin se seu aplicativo não for o primeiro pedido solicitado para iniciar o processo. ou seja, solicite um aplicativo diferente no pool de aplicativos, "Anexar ao w3wp.exe" e solicite ao aplicativo sua tentativa de depuração.
Brett Caswell
26

Se você está tendo problemas para depurar o código na Startupclasse, eu também tive esse problema - ou pensei que sim. O código estava disparando, mas acredito que isso acontece antes que o depurador seja anexado, portanto você não pode definir pontos de interrupção no código e ver o que está acontecendo.

Você pode provar isso lançando uma exceção no Configurationmétodo da Startupclasse.

Remotec
fonte
é exatamente isso que está acontecendo. Existe uma solução para fazer com que a classe Startup seja acionada após a conexão do depurador?
Tom Schreck 29/02
Posso saber como lançar exceção no método de configuração?
precisa
11
Adicionada esta linha ao Startup.cs para provar que foi executado: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Iniciado");
RaoulRubin
11
@Karthikeyan - Adicione esta linha depois de antes (não importa) do ConifureAuth (app); line - lança nova exceção ("Hello");
Francis Rodgers
Faça o System.Threading.Sleep primeira linha (10_000) para que ele irá esperar o tempo suficiente para o depurador para anexar antes de continuar (ajustar conforme necessário)
James Gray
16

DEBUGGING SUGESTÕES

Se a depuração não funcionar, tente usar o IIS Express ou tente o método abaixo para o IIS local

Usando o IIS local

Por alguma razão, este método permite a depuração deste método:

  1. Solicitar uma página da Web
  2. Anexar ao processo w3wp.exe
  3. Toque no arquivo web.config
  4. Solicitar uma página da Web

Dica extra

Talvez fazer isso libere um cache:

  1. No web.config, adicione o atributo optimizeCompilations com um valor falso

    <compilação debug = "true" ... optimizeCompilations = "false">

  2. Executar site

  3. Desfazer a alteração no web.config
Rasmus
fonte
2
alternando a configuração optimizeCompilations="false"funciona para mim
Barsh
Você salva meu dia! optimizeCompilations = "false" funciona para mim.
Vostrugin
optimizeCompilations salvou meu dia. Obrigado :)
Bogdan Stojanovic
13

Eu tive um problema semelhante a isso e a limpeza de arquivos ASP.NET temporários o corrigiu. Espero que isso ajude alguém.

randomsolutions
fonte
4
Apenas para referência, aqui está outra resposta que fornece um pouco mais detalhadamente sobre onde esses arquivos são armazenados: stackoverflow.com/questions/16137457/...
Sam Storie
11
Eu executar o IIS Express e janela 8: excluir aqui: C: \ Users \ seu nome de usuário \ AppData \ Local \ Temp \ Arquivos temporários ASP.NET \ vs
Grey Wolf
Obrigado, eu observei esta resposta, porque eu tinha um erro antes de este, sobre algo bloquear um arquivo na pasta de arquivos temporários da ASP.NET
Elger Mensonides
Eu estava lutando com isso por um dia inteiro e, finalmente, isso funcionou para mim. Depois de limpar o Temporary ASP.NET Filesconteúdo da pasta, a inicialização do Owin foi chamada.
Harsh Baid
11

Eu tive o mesmo problema. O pacote Microsoft.Owin.Host.SystemWeb foi instalado, mas durante a instalação o NuGet não conseguiu adicionar a dll como referência por algum motivo. Verifique se o seu projeto tem essa referência. Caso contrário, você pode tentar reinstalar:

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

Eu tive um erro como abaixo na reinstalação, mas de alguma forma funcionou:

Falha na chamada do sistema. (Exceção de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

Ufuk Hacıoğulları
fonte
Eu estava lutando contra isso há um tempo, e foi isso que resolveu o meu problema. Eu tinha a referência de nuget em packages.config, mas meu csproj não tinha a referência.
Zackary Geers
11
No meu caso, eu não tinha o pacote instalado. A execução do pacote de instalação Microsoft.Owin.Host.SystemWeb resolveu meu problema. Obrigado pela dica.
J. Chifre
2

No meu caso, o pool de aplicativos IIS não foi definido como v4. Foi v2.

Mudou o AppPool para a v4 e tudo estava bem.

Lobo cinzento
fonte
2

Eu tive o mesmo problema quando adicionei Owin a um projeto da web existente. Acabei encontrando o problema devido ao seguinte no arquivo web.config.

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

   ...

</assemblies>

O assembly de remoção = "*" estava causando o problema. Quando removo esta linha, o código de inicialização do Owin foi executado. Eu finalmente mudei para o seguinte e funcionou perfeitamente

<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>
James Rapson
fonte
11
Eu tinha um projeto sitecore e, no meu arquivo web.config, não havia nenhuma tag <remove assembly = * "/>. Mas a adição de <add assembly =" Microsoft.Owin.Host.SystemWeb "/> resolveu meu problema.
burki
Obrigado @burki, por causa do seu comentário, eu me forcei a tentar esta solução e funcionou para nós também! A classe de inicialização Owin não estava disparando desde a atualização do VS para 15.9.9.
David
muito obrigado! isso foi corrigido, tive que adicionar o seguinte: <assemblies> <remover assembly = "*" /> <adicionar assembly = "myapplication" /> <adicionar assembly = "Microsoft.Owin.Host.SystemWeb" /> <adicionar assembly = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / assemblies>
trykyn
1

No meu caso, o caminho de saída do meu site é alterado por alguém, o IIS Express ainda não carrega OWIN, e a classe de instalação não será atingida, é claro. Depois de definir o caminho de saída como "bin \", ele funciona bem.

Sean Song
fonte
1

No meu caso, este pacote Microsoft.Owin.Host.SystemWeb está presente no projeto.

Mas abaixo de duas tags não estão presentes no web.config.

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

depois de adicioná-los, ele funciona sem problemas.

ABB
fonte
1

No meu caso, meu web.config tinha

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

Para forçá-lo a voltar para Owin, eu precisava que fosse

<authorization>
  <deny users="*" />
</authorization>
sirdank
fonte
0

Eu brinquei com muitas sugestões neste post.

Eu tinha o seguinte, mas ainda não consegui parar em um ponto de interrupção. Lançar uma exceção provou que o código estava sendo inserido.

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

Finalmente, por desespero, olhei para as propriedades project-> e, na seção WEB, marquei também a caixa de seleção NATIVE CODE (o ASP.NET já deveria estar marcado).

Isso finalmente resolveu para mim.

Nota: estou usando o Visual Studio 2017 Professional.

Anthony De Souza
fonte
0

Não tenho certeza se isso ainda ajudará alguém, mas já fiz todas as soluções acima (e de algumas outras postagens) sem sucesso.

O que corrigiu o problema do meu lado foi colocar uma barra invertida no final do valor RedirectUri no web.config (louco, eu sei!). RedirectUri é um parâmetro em UseOpenIdConnectAuthentication.

Então, em vez de:

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

Faça isso:

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

E atualizou o URL de resposta nas configurações de aplicativos do Azure também.

Isso fez com que a Inicialização fosse executada conforme o esperado (provavelmente limpou algum cache) e os pontos de interrupção estão sendo disparados.

PARA SUA INFORMAÇÃO. Eu estava modelando meu código a partir daqui: https://github.com/microsoftgraph/aspnet-connect-sample

niki b
fonte
0

Depois de converter uma biblioteca de classes em um projeto de aplicativo da Web , deparei-me com isso e me tornei teimosa. No meu .csProjarquivo, eu tinha o seguinte:

<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>
  • criando assim as várias DLLs em uma subpasta da pasta bin (que ifc. não funcionará). A solução foi alterar o conteúdo do texto OutputPathpara apenas bin\.
Frederik Struck-Schøning
fonte
0

Para mim, foi porque eles não estão no mesmo espaço para nome. Depois de remover meu AppStart de "project.Startup.AppStart" e permitir que ambos Startup.cs e Startup.Auth.cs com o namespace "project.Startup", tudo voltou ao seu funcionamento perfeito.

Espero que ajude!

Fábio Carvalho
fonte
0

Se você estiver enfrentando esse problema com a hospedagem do IIS, mas não com a depuração F5, tente criar um novo aplicativo no IIS.

Isso consertou para mim. (windows 10) No final, excluí o aplicativo IIS "ruim" e recriei um idêntico com o mesmo nome.

pmb5
fonte
0

Eu acho que o que algumas pessoas estavam tentando entender acima é que, se você quiser fazer com que seu servidor OWIN "ganhe vida" programaticamente, você chamaria algo assim:

using Microsoft.Owin.Hosting;

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

Depois de fazer essa chamada, você verá a chamada para StartupMethod () disparar no depurador

JoeHz
fonte
0

Isso funcionou para mim:

adicionar modo de autenticação = "Nenhum"

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

Primeiro adicione a classe de autenticação OWIN e ative OWIN: AutomaticAppStartup chave no seu web.config, como Agora vai disparar

Venkatesh Prabu
fonte