2011-03-11 4 views
4

IoC 컨테이너로 Unity를 사용하는 ASP.NET MVC 3 응용 프로그램을 배포하려고합니다. 응용 프로그램은 로컬 서버에서 제대로 작동하지만 배포 할 때 예외가 발생합니다.이 개체에 대해 정의 된 매개 변수없는 생성자가 없습니다. 그리고 이것은 Unity DependencyResolver에 의해 주입 된 저장소를 가져와야하는 컨트롤러를 위해 발생합니다.Unity DependencyResolver가 공유 호스팅에서 작동하지만 로컬에서 작동하지 않는 이유는 무엇입니까?

Unity를 NuGet과 함께 설치 했으므로 직접 참조해야하며 bin 폴더에 복사되었는지 확인했습니다.

편집 :

[MissingMethodException: No parameterless constructor defined for this object.] 
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98 
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241 
    System.Activator.CreateInstance(Type type, Boolean nonPublic) +69 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +67 

[InvalidOperationException: An error occurred when trying to create a controller of type 'nBlog.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.] 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +182 
    System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80 
    System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +74 
    System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +196 
    System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49 
    System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13 
    System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +98 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8841400 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +18 

누구든지 문제가 무엇인지 생각이 :

여기에 스택 추적입니까?

편집 2 :

내가 MVC의 GAC에 라이브러리 (System.Web.Mvc 등) 대신 직접 참조에 대한 참조를 추가하여 문제를 해결했습니다.

이전에 응용 프로그램에서 Mvc 라이브러리를 직접 참조하고 있었는데 서버에 .net 4.0과 mvc 2가 설치 되었기 때문에 bin 서버가 호스팅 서버에 배포되었지만 호스팅 공급자가 Mvc 3을 설치 했으므로 GAC에 대한 참조로 변경되었습니다. 나는 그것이 보안상의 문제라고 생각하지만, 나는 호스팅 환경에서이 애플리케이션 보안에 익숙하지 않고 정확히 어떤 것이 문제인지 알고 싶다. 자원 링크도 감사하겠습니다.

+0

은 Web.config의에서 구성 문제처럼 보이는합니다. 또한 스택 추적을 보여주십시오. –

답변

0

Unity가 Reflection을 내부적으로 사용하여 클래스와 종속성을 생성하면 완전 신뢰에서 실행중인 응용 프로그램에 대한 암시 적 종속성을 갖게됩니다.

많은 공유 호스팅 제공 업체는 중간 신뢰도까지만 허용하므로 Unity가 런타임에 코드를 반영하지 못하게 될 수 있습니다. 애플리케이션이 완전 신뢰로 실행되도록 요청할 수도 있지만 호스팅 제공 업체에 따라 다릅니다.

당신의 web.config 파일 편집하여 from Rick Strahl's blog here

[편집] 시도 테스트 로컬 일부 비슷한 경험 :

<location allowOverride="false"> 
    <system.web> 
    <!-- level="[Full|High|Medium|Low|Minimal]" --> 
    <trust level="Medium" originUrl=""/> 
    </system.web> 
</location> 
+0

같은 문제가 Entity Framework에서 발생하는지 알고 있습니까 ?? (예,이 질문과 관련이 없다는 것을 알고 있습니다 :-)) – mwgriffith

+0

@mwgriffith -이 질문을 확인하십시오. http://stackoverflow.com/questions/766540/does-entity-framework-linq-to-sql- 데이터 바인딩 사용 - 반사 –

+0

중간 신뢰에서 로컬로 작동하는지 어떻게 테스트 할 수 있습니까? – frennky

관련 문제