我有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的禁止?