2014-11-30 5 views
9

ASP.NET MVC 및 Razor 마크 업 웹 사이트가 있고 Linux VPS에서 실행하고 싶습니다.Linux에서 xsp로 ASP.NET 응용 프로그램을 실행할 때 누락 된 메서드 오류가 발생했습니다.

나는 우분투 저장소에서 모두 모노 3.2.8 및 xsp4 3.0.0.0 버전이 내가 서버에 내 웹 사이트를 업로드하고 웹 사이트의 폴더에 xsp4 실행, 그것은 밖으로 시작하고 인쇄 (사용하여 설치 apt-get install mono-complete mono-xsp4)

나는 내 웹 사이트로 이동 내 웹 브라우저를 사용할 때 포트 8080에서 수신 있다는 것은 그러나, 런타임 오류 및 xsp4 출력이 그것은 새로운 우분투 14.04 설치의

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 

콘솔에 표시됩니다. Visual Studio 2013을 사용하여 Windows에서 웹 사이트를 개발하고 있습니다. 이러한 오류를 수정하는 방법에 대해 알고 싶습니다.

+1

아직 문제가 해결 되었습니까? – brian

답변

4

이 문제점에 대한 업스트림 버그보고는 here입니다.

버그가 수정되고 구현 된 방법은 HttpApplication.RegisterModule 대신 Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule을 사용하는 것이 좋습니다.

The issue here

는 OWIN에 PreApplicationStart.csMicrosoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModuleHttpApplication.RegisterModule을 변경 (이전 마스터가 이미 NET 4.0 관련 IFDEF를했다,하지만 어떤 이유로 복귀했다) 또는 그들이 지정 DLL 또는 포함하는 것입니다 해결 방법을 설명합니다 web.config에서 모듈을 수동으로 등록하십시오.

OWIN에 코드를 변경하지 않아도되는 대안은 Mono에서 누락 된 메서드를 구현하고 버그를 수정 한 다음 수정 내용을 Mono 버전으로 백 포트하는 것입니다.

+0

Mono 4.0.1을 사용하여 Visual Studio 2013에서 만든 기본 MVC WebApplication 템플릿 (개별 인증 포함)과 동일한 MissingMethodException을 가졌습니다. 기존 프로젝트가이 기본 템플릿을 기반으로하므로이를 해결해야합니다. 언급 한 PreApplicationStart.cs에서 수정 된 소스 코드에서 HttpApplication 클래스를 다시 빌드한다는 의미입니까? 좀 더 설명해 주시겠습니까? – brian

+0

OWIN을 다시 빌드하여 다음 [비교] (* https://katanaproject.codeplex.com/SourceControl/diff/file/view/b85af2f1cfbf98f15b9d6a6a6a4cd8ef3923f0dc?fileId=src%2FMicrosoft.Owin.Host.SystemWeb % 2FPreApplicationStart.cs & olderChangeSetId = 501be946a5a99edf1140fbf5cbce0a29324870c1) – Appleman1234

+0

도움 주셔서 감사합니다. 이것에 대해 더 궁금한 점이 있습니다. 여기에 게시했습니다 : http://stackoverflow.com/questions/30186770/need-help-in-modifying-owin-katana-for-running-vs2013s-mvc-webapplication-in I 네가 나를 도울 수 있는지 궁금해. 감사. – brian

3

이것은 실제로 완전한 대답은 아니지만 아마도 내가 한 것이 누군가를 조금 더 도울 수 있도록 도울 것입니다.

AppendTrailingBackslash(), GetBufferlessInputStream() 및 다른 몇 가지 기능과 같은 Mono (당시 v3.99)의 dev 브랜치에있는 관련이없는 공백을 채운 다음 MVC5 앱을 가져올 수있었습니다 XSP4를 사용하여 우분투에서 정상 작동하고 작동합니다.

그런 다음 OWIN과 SignalR의 단일 빌드 버전을 사용하려고했습니다.

위에서 Appleman1234가 제안한 것을 수행하고 HttpApplication.cs에서 RegisterModule()을 구현하여 Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule()이 수행하는 작업을 수행했습니다. 이 작동하지 않는 것 및 오류없이 system.web/httpModules 섹션에 모듈 문자열을 주입합니다.

<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(); 

을 일부를 해킹 한 후

이 수동으로 system.web에 OwinHttpHandler 지정과 함께 SignalR 코드의 (나는 요청 헤더에서 Accept-Encoding을 제거하려고 했으므로 NameValueCollection에서 일부 ReadOnlyException을 얻었습니다 ... 나중에 이해할 수있을 것 같았습니다), 모든 방법을 초기화해야한다고 생각했습니다. 내가 적어도 탐색 할 수있는 지점까지 to/signalr 및 몇 가지 의미있는 오류 (connectionId 누락, 알 수없는 프로토콜 등)가 발생합니다. SignalR 기능을 실제로 테스트하지는 않았지만 별도의 클라이언트 프로그램을 사용하려고합니다.

나는 이것을 xsp4/mono 4.5를 사용하여 호스팅하고 있습니다.

그러나, 그렇게 나는 또한주의 내가 404

를 먹을수록 정말, 웹 사이트에 다른 아무것도 (스타일 시트, 스크립트 등)을 찾아 볼 수 없기 때문에 나는 핸들러/파이프 라인의 나머지 부분을 사방 생각 그 :

(1) HttpRuntime.UsingIntegratedPipeline은 XSP4의 컨텍스트에서 false를 반환합니다.

내가 원래이 예외 던졌다 HttpApplication.cs/AsyncInvoker::Invoke()에 예외를 주석했다 (2) :이 주어

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

을 단순히 아직 충분히 비동기 및 모노 다른 지원이 얻을 수없는 OWIN/SignalR 일하다? 나는 UsingIntegratedPipeline이 XSP4에 대한 no-go라는 false를 반환한다고 생각하고 있습니까?

+0

댄, 당신이 여기에서 설명한 똑같은 문제가 있습니다. 나는 당신의 제안을 따르고 성공적으로 SignalR을 OWIN 미들웨어로로드했다. (비록 SignalR 부분이 실제로 작동하는지 보려고하지는 않았지만). 그러나 설명했듯이 태그를 추가하면 모든 css 및 스크립트 파일을 더 이상로드 할 수 없습니다. 이 문제를 아직 해결했는지 궁금합니다. 고맙습니다. – brian

+0

안녕하세요! 아뇨, 죄송합니다. 나는이 문제를 그대로두고 정신 박약에 밀어 넣었습니다. 그러나 독립 실행 형 콘솔 앱 (비록 SystemWeb에 대한 의존성이 없기 때문에 항상 작동했습니다)에서 SignalR을 사용하는 경우에도 Linux/Mono에서는 WebSocket을 통해 연결하지 않습니다. 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