HTTP处理程序不能正确注册在Mono MVC 3下

我不知道该怎么做。 我试图通过FastCGI在Mono下运行ASP.NET MVC 3网站,而Cassette的HTTP处理程序将无法正确注册。 该网站是http://www.tychaia.com/ 。

奇怪的是:

  • 它在我的本地机器上正常工作。
  • 当网站在生产机器上的xsp4下运行时,它工作正常。
  • 当网站在生产机器上的fastcgi-mono-server4下运行时,它不能正常工作。

我已经尝试过的事情:

  • 检查Nginxconfiguration,确保它传递了所有正确的FastCGI参数(它是)。
  • 单声道3.0.7和3.0.10。 一个朋友在3.0.7下工作,但对我没有骰子。

这是特定的Web.config项:

 <add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" /> 

( https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Web.config#L47 )

据我所知,我有两个问题导致这个问题:

  • MVC的IgnoreRoute并不匹配cassette.axd URL,即使它在https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20 (和它明确指定在简单的旧XSP4下工作)。 当我为string“cassette.axd”添加一个明确的IgnoreRoute(通过执行routes.IgnoreRoute("cassette.axd"); ),它开始传递给处理程序,除了:
  • 服务器的HTTP处理程序path匹配似乎只能在FastCGI下完成匹配。 即使当我closures所有在站点的MVC注册,处理程序只匹配cassette.axd ,即使如此,处理程序似乎没有任何path信息。
  • 当我添加更多的条目,如<add path="cassette.axd/*" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />这些也开始被处理程序处理,通常应该在这个url上做出回应; 你只需要获取默认值,就好像没有附加的URL参数(也许它们被HTTP处理程序path匹配所使用)。

FastCGI目前的设置方式是:

  • 主要的Nginx实例,它只是一个反向代理到更多的Nginx实例(我运行多个网站,我喜欢让他们孤立)。 它指向:
  • http://tychaia.com/的Nginx实例,它通过UNIX套接字调用FastCGI。

同样,这个问题在XSP4下不会发生, 它只发生在FastCGI下。 虽然我可以将代理转换为XSP4实例,但由于性能方面的原因,我仍然犹豫不决。

还有什么我可以在这里失踪?

编辑:这是一些应该工作的url。 正如你所看到的,他们正在碰到StaticFileHandler而不是Cassette HTTP处理程序:

  • http://tychaia.com/cassette.axd/stylesheet/nDvbK5eAxf6miyaRa_J0vl7YdxA=/Content
  • http://tychaia.com/cassette.axd/script/oz4BBh-gK6gJkhB5S64l3mXseFQ=/Scripts

您可以看到,明确指定了IgnoreRoute后, cassette.axdpath确实会映射,但只有该path:

  • http://tychaia.com/cassette.axd

如果你在它的末尾加上一个斜杠,它也不起作用:

  • http://tychaia.com/cassette.axd/

编辑2:我已经更新的网站只是链接到/ /Content/main.css文件,以便该网站正确显示,而这个问题得到sorting; 如果您在浏览器中检查networking请求,则会看到Cassette包的失败请求。

我已经提交了单声道错误跟踪器的一个错误,希望得到一个答案,为什么会发生这种情况:

https://bugzilla.xamarin.com/show_bug.cgi?id=12190

更新:我找到了问题的原因。 在OpenSUSE下,mono和XSP是分开打包的。 即使我将Mono升级到3.0.10,XSP / FastCGI仍然保持在2.10.2.0版本。 当我将XSP / FastCGI软件包升级到2.11.0.0时,问题消失了。