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.


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 .


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.


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.


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.


é 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

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.


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))


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.


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>

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.


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.


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>

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.


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


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\.

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!


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.


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



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>

-3

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.