2014-11-30 11 views
9

Ho ASP.NET con sito Web di markup MVC e Razor e voglio eseguirlo sul mio VPS Linux.Errori del metodo mancanti durante l'esecuzione dell'app ASP.NET con xsp su linux

ho mono 3.2.8 e la versione 3.0.0.0 xsp4, sia dal repository di Ubuntu (installato utilizzando apt-get install mono-complete mono-xsp4)

Quando carico il mio sito web per server ed eseguire xsp4 nella cartella del sito web, inizio e stampe fuori che è in ascolto sulla porta 8080. Tuttavia quando utilizzo il mio browser web per navigare il mio sito web, visualizza errore di esecuzione e le uscite xsp4 questo alla console

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 

si tratta di una nuova installazione di Ubuntu 14.04. Sto sviluppando il mio sito Web su Windows, utilizzando Visual Studio 2013. Qualche idea su come correggere questi errori?

+1

Hai già risolto il problema? – brian

risposta

4

Il bug report a monte relativo a questo problema si trova here.

Una soluzione suggerita finché il bug non viene risolto e il metodo implementato è quello di utilizzare Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule anziché HttpApplication.RegisterModule.

The issue here descrive una soluzione alternativa, che sarebbe quello di cambiare HttpApplication.RegisterModule-Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule in PreApplicationStart.cs nel OWIN (il maestro precedente aveva già l'IFDEF rilevante per NET 4.0, ma era ritornato per qualche motivo) o per includere la DLL specificano o registrare il modulo manualmente in web.config.

L'alternativa che non richiede alcuna modifica del codice a OWIN consiste nell'implementare il metodo mancante in Mono e correggere il bug, quindi eseguire il backport della correzione sulla versione Mono.

+0

Ho avuto la stessa MissingMethodException con il modello MVC WebApplication predefinito (con autenticazione individuale) creato in Visual Studio 2013, utilizzando Mono 4.0.1. Devo risolverlo poiché il mio progetto esistente si basa su questo modello predefinito. Intendi ricostruire la classe HttpApplication dal codice sorgente con la modifica in PreApplicationStart.cs che hai menzionato? Puoi spiegare di più su questo per favore? – brian

+0

Intendo ricostruire OWIN in modo che assomigli alla parte sinistra del seguente [confronto] (https://katanaproject.codeplex.com/SourceControl/diff/file/view/b85af2f1cfbf98f15b9d6a6a6a4cd8ef3923f0dc?fileId=src%2FMicrosoft.Owin.Host.SystemWeb % 2FPreApplicationStart.cs & olderChangeSetId = 501be946a5a99edf1140fbf5cbce0a29324870c1) – Appleman1234

+0

Grazie per il tuo aiuto. Ho ulteriori domande su questo e l'ho postato qui: http://stackoverflow.com/questions/30186770/need-help-in-modifying-owin-katana-for-running-vs2013s-mvc-webapplication-in I Mi chiedo se puoi aiutarmi su questo. Grazie. – brian

3

Questa non è davvero una risposta completa, ma forse quello che ho fatto potrebbe aiutare qualcuno ad andare un po 'oltre.

Dopo aver riempito alcuni vuoti non correlati sul ramo dev di Mono (che al momento era v3.99) come AppendTrailingBackslash(), GetBufferlessInputStream() e alcune altre funzioni, sono riuscito a ottenere un'app MVC5 in arrivo e funziona OK su Ubuntu usando XSP4.

Ho quindi provato a utilizzare OWIN e la versione monofase di SignalR.

Ho fatto quanto suggerito in precedenza da Appleman1234, implementare RegisterModule() in HttpApplication.cs per fare ciò che fa Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(). Questo sembra funzionare e inietta la stringa del modulo nella sezione system.web/httpModules senza errori.

Questo, combinato con specificare manualmente l'OwinHttpHandler nel mio 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> 

e chiamando il default MapSignalR() nella mia configurazione di avvio():

var appBuilder = app.MapSignalR(); 

e dopo un po 'di hacking del codice SignalR (stavo ottenendo alcuni ReadOnlyException su un NameValueCollection mentre tentava di rimuovere Accept-Encoding dagli header delle richieste ... ho pensato che ci sarei arrivato più tardi), penso di averlo inizializzato fino in fondo al punto in cui potrei almeno sfogliare per/signalr e ottenere indietro alcuni errori significativi (mancante connectionId, protocollo sconosciuto, ecc). Non sono riuscito a testare realmente la funzionalità SignalR, ma sto per farlo utilizzando un programma client separato.

Sto ospitando questo utilizzando xsp4/mono 4.5.

Tuttavia, così facendo penso di clobbered il resto della gestori/gasdotto perché non posso davvero passare a qualsiasi altra cosa nel sito (fogli di stile, script, ecc), come ho un 404

noti anche ovvero:

(1) HttpRuntime.UsingIntegratedPipeline restituisce false nel contesto di XSP4.

(2) ho dovuto commentare l'eccezione in HttpApplication.cs/AsyncInvoker::Invoke(), che originariamente ha gettato questa eccezione:

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

Detto questo, è semplicemente non ancora abbastanza asincrona e altre forme di sostegno in Mono per ottenere OWIN/SignalR lavorare? Sto pensando che dal UsingIntegratedPipeline restituisce false che si tratta di un no-go per XSP4?

+0

Dan, ho esattamente lo stesso problema che hai descritto qui. Ho seguito i tuoi suggerimenti e caricato con successo SignalR come middleware OWIN (anche se non ho provato a vedere se la parte SignalR funziona effettivamente). Ma come hai descritto, dopo aver aggiunto il tag , tutti i file css e script non possono più essere caricati. Mi chiedo se hai già risolto questo problema. Grazie. – brian

+0

Ciao! No, scusa, ho lasciato questo problema così com'era e l'ho spinto sul mio stack mentale. Tuttavia, ho notato che anche quando si utilizza SignalR in un'app console standalone (che ha sempre funzionato in quanto non esiste alcuna dipendenza da SystemWeb), su Linux/Mono non si connette tramite websockets. È sempre qualcosa di meno, come serverSentEvents. Penso che ciò sia dovuto al fatto che [System.Net.WebSockets] (http://go-mono.com/status/status.aspx?reference=4.5&profile=4.5&assembly=System) non è completamente implementato in Mono 4.5. Posso implementare il mio gestore usando SuperWebSockets (che ** fa ** con Mono) – Dan