我的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,但这并没有什么区别。
我还需要做些什么?
答案 0 :(得分:26)
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站点迁移到新服务器时,我也遇到了同样的问题。它给了我噩梦,只是为了回顾我必须做所有这些才能让它发挥作用
[assembly: OwinStartupAttribute(typeof([YourAssemblyName].Startup))]
添加到Startup类(在using语句之后和命名空间声明之前)将这些密钥添加到web.config
的<appSettings>
部分
<add key="owin:AppStartup" value="[NamespaceForYourStartUpClass].Startup, [YourAssemblyName]" />
<add key="owin:AutomaticAppStartup" value="true" />
最后,根据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>