2014-11-30 3 views
9

У меня есть ASP.NET с веб-сайтом MVC и Razor, и я хочу запустить его на своем Linux VPS.Отсутствующие ошибки метода при запуске приложения ASP.NET с xsp на linux

У меня есть моно 3.2.8 и версия xsp4 3.0.0.0, как из репозитория Ubuntu (устанавливается с помощью apt-get install mono-complete mono-xsp4)

Когда я загрузить свой сайт на сервер и запустить xsp4 в папке сайта, она начала и печатает что он прослушивает порт 8080. Однако, когда я использую веб-браузер, чтобы перейти на веб-сайт, он отображает ошибку во время выполнения и 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. Я разрабатываю свой веб-сайт в Windows, используя Visual Studio 2013. Есть идеи, как исправить эти ошибки?

+1

Вы еще не решили проблему? – brian

ответ

4

Отчет об ошибках в верхнем течении по этой проблеме находится here.

Предлагаемое решение обходного пути до тех пор, пока ошибка не будет исправлена, и реализованный метод заключается в использовании Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule вместо HttpApplication.RegisterModule.

The issue here описывает обходной путь, который был бы изменить HttpApplication.RegisterModule к Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule в PreApplicationStart.cs в Owin (предыдущий хозяин уже имел соответствующий IfDef для NET 4.0, но она была вернулась по какой-то причине) или включить DLL они определяют или зарегистрируйте модуль вручную в файле web.config.

Альтернативой, которая не требует какого-либо изменения кода для OWIN, является внедрение отсутствующего метода в Mono и исправление ошибки, а затем резервное копирование исправления в вашу версию Mono.

+0

У меня было такое же MissingMethodException с шаблоном MVC WebApplication по умолчанию (с индивидуальной аутентификацией), созданным в Visual Studio 2013, с использованием Mono 4.0.1. Мне нужно решить это, поскольку мой существующий проект основан на этом шаблоне по умолчанию. Вы хотите перестроить класс HttpApplication из исходного кода с изменением в PreApplicationStart.cs, о котором вы упомянули? Можете ли вы объяснить больше об этом, пожалуйста? – brian

+0

Я имею в виду перестроить OWIN так, чтобы он напоминал левую раздачу из следующего [сравнения] (https://katanaproject.codeplex.com/SourceControl/diff/file/view/b85af2f1cfbf98f15b9d6a6a6a4cd8ef3923f0dc?fileId=src%2FMicrosoft.Owin.Host.SystemWeb % 2FPreApplicationStart.cs & oldChangeSetId = 501be946a5a99edf1140fbf5cbce0a29324870c1) – Appleman1234

+0

Спасибо за вашу помощь. У меня есть дополнительные вопросы по этому вопросу, и я разместил его здесь: http://stackoverflow.com/questions/30186770/need-help-in-modification-owin-katana-for-running-vs2013s-mvc-webapplication-in I интересно, можете ли вы помочь мне в этом. Благодарю. – brian

3

На самом деле это не полный ответ, но, возможно, то, что я сделал, может помочь кому-то получить немного дальше.

После заполнения некоторых несвязанных пустот в ветви dev Mono (которая в то время была v3.99), например AppendTrailingBackslash(), GetBufferlessInputStream() и нескольких других функций, я смог получить приложение MVC5 up и функции OK на Ubuntu с использованием XSP4.

Затем я попытался использовать OWIN и моностроенную версию SignalR.

Я сделал то, что предложил Appleman1234 выше, реализует RegisterModule() в HttpApplication.cs, чтобы выполнить то, что Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(). Кажется, что это работает и вводит строку модуля в раздел system.web/httpModules без ошибок.

В сочетании с ручным указанием OwinHttpHandler в моем system.web:

<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, поскольку он пытался удалить Accept-Encoding из заголовков запроса ... Я решил, что доберусь до этого позже), я думаю, что я получил его для инициализации полностью до такой степени, что я мог хотя бы просматривать to/signalr и получить некоторые значимые ошибки обратно (отсутствует connectionId, неизвестный протокол и т. д.). Мне не удалось фактически проверить функциональность SignalR, но я собираюсь сделать это, используя отдельную клиентскую программу.

Я принимаю это с помощью xsp4/mono 4.5.

Однако при этом я думаю, что я затерт остальную часть обработчиков/трубопровода, потому что я не могу просматривать что-нибудь еще на веб-сайте (таблиц стилей, скриптов и т.д.), так как я получаю 404

Также обратите внимание на что:

(1) HttpRuntime.UsingIntegratedPipeline возвращает false в контексте XSP4.

(2) Я должен был закомментировать исключение в HttpApplication.cs/AsyncInvoker::Invoke(), который первоначально бросил это исключение:

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

Учитывая это, там просто не хватает Асинхронный и другую поддержку в Mono, чтобы получить Owin/SignalR работать? Я думаю, что с UsingIntegratedPipeline возвращает false, что это не для XSP4?

+0

Дэн, у меня точно такая же проблема, как вы описали здесь. Я следил за вашими предложениями и успешно загружал SignalR в качестве промежуточного программного обеспечения OWIN (хотя я не пытался увидеть, действительно ли работает часть SignalR). Но, как вы описали, после добавления тега все файлы css и script больше не могут быть загружены. Интересно, исправлена ​​ли эта проблема? Спасибо. – brian

+0

Привет! Нет, извините, я оставил эту проблему так, как было, и толкнул ее на мой умственный стек. Однако я заметил, что даже при использовании SignalR в автономном консольном приложении (которое всегда работало, поскольку нет зависимости от SystemWeb), в Linux/Mono он не подключается через websockets. Это всегда что-то меньшее, например serverSentEvents. Я думаю, это связано с тем, что [System.Net.WebSockets] (http://go-mono.com/status/status.aspx?reference=4.5&profile=4.5&assembly=System) не реализовано полностью в Mono 4.5. Я могу реализовать собственный обработчик, используя SuperWebSockets (который ** делает ** с помощью Mono) – Dan