在 Linux 上运行带有 xsp ASP.NET 应用时缺少方法错误



我已经 ASP.NET MVC和Razor标记网站,我想在我的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.DynamicModuleHelper.DynamicModuleUtility.RegisterModule 而不是 HttpApplication.RegisterModule

此处的问题描述了一种解决方法,即在 PreApplicationStart 中将HttpApplication.RegisterModule更改为 Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule.cs在 OWIN 中(以前的主节点已经具有 NET 4.0 的相关 IFDEF,但由于某种原因被还原(或包含他们指定的 DLL 或在 web.config 中手动注册模块。

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

这不是一个完整的答案,但也许我所做的可能会帮助某人走得更远。

在填补了 Mono 的开发分支(当时是 v3.99(上的一些不相关的空白后,如 AppendTrailingBackslash((、GetBufferlessInputStream(( 和其他一些函数,我能够让一个 MVC5 应用程序出现并使用 XSP4 在 Ubuntu 上运行正常。

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

我按照Appleman1234上面的建议做了,在HttpApplication中实现RegisterModule(.cs来做Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule((所做的事情。 这似乎确实有效,并将模块字符串注入 system.web/httpModules 部分而没有错误。

这与在我的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 代码之后(我在 NameValueCollection 上得到了一些 ReadOnlyException,因为它试图从请求标头中删除接受编码......我想我稍后会谈到这一点(,我想我让它一直初始化到我至少可以浏览到/signalr 并返回一些有意义的错误(缺少 connectionId、未知协议等(。 我没有实际测试 SignalR 功能,但我即将使用单独的客户端程序来测试。

我正在使用 xsp4/mono 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 就不行了吗?

相关内容

最新更新