2013-05-05 68 views
2

我在我的智慧结尾。我试图通过FastCGI在Mono下运行ASP.NET MVC 3网站,并且Cassette的HTTP处理程序将无法正确注册。该网站是http://www.tychaia.com/未在Mono MVC 3下正确注册的HTTP处理程序

奇怪的是:

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

事情我已经尝试:

  • 检查Nginx的配置,并确定它传递所有正确的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网址不匹配,即使明确指定为https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20(并且它工作在联合国版本der普通老XSP4)。当我为字符串“cassette.axd”添加一个明确的IgnoreRoute(通过执行routes.IgnoreRoute("cassette.axd");),它开始传递给处理程序,除了:
  • 服务器的HTTP处理程序路径匹配似乎只是确切在FastCGI下匹配。即使我关闭了网站中的所有MVC注册,处理程序只匹配cassette.axd,即使如此,处理程序似乎也没有任何路径信息。
  • 当我添加更多的条目,如<add path="cassette.axd/*" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />这些也开始被处理程序处理,但它不响应,因为它通常应该在该URL;您只需获取默认值,就好像没有其他URL参数(可能它们正在被HTTP处理程序路径匹配所使用)。

即FastCGI的是目前设置的方法是:

  • 主要Nginx的实例,它仅仅是一个反向代理到更多的Nginx的情况下(我运行多个网站,我喜欢让他们隔离)。它指向:
  • Nginx实例​​,通过UNIX套接字调用FastCGI。

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

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

编辑:这里的一些网址,应该工作。正如你所看到的,他们击中StaticFileHandler的不是纸盒HTTP处理程序:

而且你可以看到,与IgnoreRoute明确指定,在cassette.axd路径确实地图,但只有这样的路径:

如果你把一个斜杠在它的结束要么它不工作:

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

回答

3

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

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时,问题消失了。

相关问题