在Linux上使用xsp运行ASP.NET应用程序时缺less方法错误

我有MVC和Razor标记网站的ASP.NET,我想在我的Linux VPS上运行它。

我有单声道3.2.8和xsp4 3.0.0.0版本,都从Ubuntu存储库(安装使用apt-get install mono-complete mono-xsp4

当我将我的网站上传到服务器并在网站文件夹中运行xsp4时,它会启动并打印出正在侦听端口8080.但是,当我使用Web浏览器导航到我的网站时,它显示运行时错误,xsp4将此输出到控制台

 Missing method System.Web.HttpApplication::RegisterModule(Type) in assembly /usr/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll, referenced in assembly /tmp/root-temp-aspnet-0/55726984/ assembly/shadow/df4b0596/52105b83_8d5b5e15_00000001/Microsoft.Owin.Host.SystemWeb.dll Missing method RegisterAllAreas in assembly /tmp/root-temp-aspnet- 0/55726984/assembly/shadow/dc5a60b8/51013ead_8d5b5e15_00000001/<website_name>.dll, type System.Web.Mvc.AreaRegistration 

这是一个新的Ubuntu 14.04安装。 我正在使用Visual Studio 2013在Windows上开发我的网站。任何想法如何解决这些错误?

关于这个问题的上游错误报告位于这里 。

建议的解决方法,直到错误被修复,并且实现的方法是使用Microsoft.Web.Infrastructure.DynamicmoduleeHelper.DynamicmoduleeUtility.Registermodulee而不是HttpApplication.Registermodulee

这里的问题描述了一种解决方法,即将HttpApplication.Registermodulee更改为OWIN中的PreApplicationStart.cs中的Microsoft.Web.Infrastructure.DynamicmoduleeHelper.DynamicmoduleeUtility.Registermodulee (之前的主服务器已经具有相关的IFDEF for NET 4.0,但它已被还原出于某种原因),或者包含它们指定的DLL,或者手动在web.config中注册该模块。

不需要对OWIN进行任何代码更改的替代方法是在Mono中实现缺少的方法,并修复该错误,然后将修复返回到您的Mono版本。

这不是一个完整的答案,但也许我可以帮助别人进一步得到一点。

在Mono的dev分支(当时是v3.99)上填充了一些不相关的空白(比如AppendTrailingBackslash(),GetBufferlessInputStream()和其他一些函数)之后,我能够得到一个MVC5应用程序来运行OK在Ubuntu上使用XSP4。

然后我尝试使用OWIN和SignalR的单声道版本。

我做了上面提到的Appleman1234,在HttpApplication.cs中实现Registermodulee()来做什么Microsoft.Web.Infrastructure.DynamicmoduleeHelper.DynamicmoduleeUtility.Registermodulee()。 这似乎工作,并注入模块的字符串到system.web / httpmodulees部分没有错误。

这与在我的system.web中手动指定OwinHttpHandler相结合:

 <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> <customErrors mode="Off" /> <httpHandlers> <add verb="*" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb" /> </httpHandlers> </system.web> 

并在我的启动配置()中调用默认的MapSignalR():

 var appBuilder = app.MapSignalR(); 

并在黑客的一些SignalR代码(我得到一些ReadOnlyException在一个NameValueCollection,因为它试图从请求标题中删除接受编码…我想我会到那以后),我想我知道了初始化到我至少可以浏览到/ signalr的位置,并返回一些有意义的错误(缺少connectionId,未知协议等)。 我没有去实际测试SignalR功能,但是我正在通过使用一个单独的客户端程序来完成这个功能。

我主持这个使用xsp4 /单声道4.5。

然而,在这样做的时候,我认为我对其他的处理程序/管道进行了破坏,因为我无法真正浏览网站中的其他任何东西(样式表,脚本等),因为我得到了404

另请注意:

(1) HttpRuntime.UsingIntegratedPipeline在XSP4的上下文中返回false。

(2)我不得不注释掉HttpApplication.cs/AsyncInvoker::Invoke()异常,最初抛出这个异常:

 throw new Exception("This is just a dummy"); 

鉴于此,Mono中是否还没有足够的异步和其他支持来使OWIN / SignalR正常工作? 我在想,既然UsingIntegratedPipeline返回false,这是XSP4的禁止?