如何让IIS识别OWIN启动类?

时间:2013-11-18 22:01:24

标签: c# iis owin

我的OWIN Web服务在Visual Studio 2013中运行得非常漂亮,但是当我将它发布到真正的IIS站点时,它就好像启动类中的Configuration方法尚未运行一样。我可以做“正常”的事情,比如浏览应用程序并查看目录结构,但是假设用IAppBuilder建立的任何东西都不起作用。例如,当我浏览到在Startup中设置的URL以发出OAuth2承载令牌时,我收到404.0错误。就好像Startup.Configuration(IAppBuilder应用程序)从未运行过。

我正在使用[assembly: OwinStartup(typeof(MyNamespacedStartupClass))]属性来指定启动类。

我已经使用NuGet按照我看过的说明获取了Microsoft.Owin.Host.SystemWeb和Microsoft.Owin.Diagnostics,但这并没有什么区别。

我还需要做些什么?

4 个答案:

答案 0 :(得分:26)

  1. 确保您的应用程序池处于v4.0集成模式。
  2. 确保您已将bin放置在Microsoft.Owin.Host.SystemWeb(我看到您已安装它) - 只需确保它也在bin文件夹中。
  3. This article将提供有关OWIN中间件如何在集成管道上运行的更多信息。

答案 1 :(得分:12)

我还必须在web.config

中添加一个额外的设置
<configuration>    
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />       
    </system.webServer> 
</configuration>

来自:https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIS

  

IIS具有本机静态文件模块,可以优化以跳过其他模块   管道的一部分,如果它看到与其他路径不匹配的文件路径   处理程序(例如不是aspx)。这意味着目录浏览器   中间件可能会工作,但静态文件中间件可能会工作   被绕过以支持本机静态文件模块。

     

这告诉IIS不要跳过托管的Asp.Net模块,即使是   本机静态文件模块认为它有匹配。

它还描述了另一个步骤,但我不需要这样做:

  

此外,在静态文件中间件之后添加以下阶段标记   (在命名空间Microsoft.Owin.Extensions中):   app.UseStageMarker(PipelineStage.MapHandler);

答案 2 :(得分:5)

当我将已经运行的MVC5站点迁移到新服务器时,我也遇到了同样的问题。它给了我噩梦,只是为了回顾我必须做所有这些才能让它发挥作用

  1. [assembly: OwinStartupAttribute(typeof([YourAssemblyName].Startup))]添加到Startup类(在using语句之后和命名空间声明之前)
  2. 将这些密钥添加到web.config

    <appSettings>部分
    <add key="owin:AppStartup" value="[NamespaceForYourStartUpClass].Startup, [YourAssemblyName]" />
    <add key="owin:AutomaticAppStartup" value="true" />
    
  3. 最后,根据Martijn Evens的建议,将以下内容添加到web.config中的<system.webserver>部分

    <modules runAllManagedModulesForAllRequests="true" />
    

答案 3 :(得分:3)

可能是您在某个时候从较旧的MVC升级的原因:

确保您没有

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

web.config中。它将禁止调用启动

而是将其更改为此

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

沿着这条线的某个地方 - 当我升级到MVC 5时,它被添加了(实际上几乎具有讽刺意味的是一年前的明天),直到今天我尝试使用它时,我甚至都不知道owin是什么。 / p>