MVC 웹 사이트를 Azure 웹 역할로 게시하려고합니다.
로컬에서 실행하면 모든 것이 잘 작동합니다.
하지만 Azure에 게시하고 MVC 작업을 검색하면 다음 오류가 발생합니다.
‘/’응용 프로그램에 서버 오류가 있습니다.
런타임 오류
설명 : 요청을 처리하는 동안 예외가 발생했습니다. 또한 첫 번째 예외에 대한 사용자 지정 오류 페이지를 실행하는 동안 다른 예외가 발생했습니다. 요청이 종료되었습니다.
오류가 기본 방식으로 처리되기 때문에 오류 처리기에서 예외가 발생하는 방법을 이해할 수 없습니다.
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
이것은 내 web.config입니다.
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
이것은 Error.cshtml입니다.
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
이 예외의 원인은 무엇이며 로컬에서 재현 할 수없는 이유는 무엇입니까?
답변
먼저 web.config에서 customErrors = “Off”를 설정하고 다시 배포하여 문제 진단에 도움이되는 자세한 오류 메시지를 가져옵니다. 또한 인스턴스로 RDP하고 IIS에서 로컬로 사이트를 검색하여 오류를 볼 수도 있습니다.
<system.web>
<customErrors mode="Off" />
첫 번째 추측-Copy Local = true로 설정되지 않은 일부 참조 (대부분 Azure SDK 참조)가 있습니다. 따라서 모든 종속성이 배포되지 않습니다.
먼저 자세한 오류를 확인하고 질문을 업데이트하십시오.
업데이트 : 이제 VS2013에서 사용할 수있는 두 번째 옵션 은 클라우드 서비스 또는 가상 머신 원격 디버깅 입니다.
답변
Azure를 사용하지 않았지만 로컬에서 동일한 오류가 발생했습니다. 사용하는 <customErrors mode="Off" />
것이 효과가없는 것 같았지만 이벤트 뷰어에서 응용 프로그램 로그를 확인하면 문제 해결에 필요한 모든 세부 정보가 포함 된 ASP.NET의 경고가 표시되었습니다.
답변
이를 web.config 변환 파일에 추가하면 디버깅을 활성화 또는 비활성화하도록 특정 게시 옵션을 설정할 수도 있습니다.
<system.web>
<customErrors mode="Off" defaultRedirect="~/Error.aspx" xdt:Transform="Replace"/>
</system.web>
답변
IIS에 게시하는 경우, 웹 배포에 의해, 난 그냥 확인 파일이 옵션 게시 및 실행을. 이제 작동합니다! 이 배포 후에는 확인란을 선택할 필요가 없습니다. 나는 이것이 모든 사람을위한 해결책이 될 수 없다고 생각하지만 내 문제를 해결하기 위해 내가해야 할 유일한 일이다. 행운을 빕니다.
답변
나는 redirectMode="ResponseRewrite"
( redirectMode="ResponseRedirect"
잘 작동) 에서만이 문제가 있었고 위의 해결책 중 어느 것도 문제 해결에 도움이되지 않았습니다. 그러나 서버의 응용 프로그램 풀의 “관리 파이프 라인 모드”를 “클래식”에서 “통합”으로 변경하면 사용자 지정 오류 페이지가 예상대로 나타납니다.
답변
대신 Oracle.ManagedDataAccess.dll을 사용하고 (Oracle에서 다운로드) 해당 dll을 프로젝트 bin dir에 포함하고 프로젝트에서 해당 dll에 대한 참조를 추가 할 수 있습니다. 코드에서 “Oracle.MangedDataAccess.Client 사용”. 평소와 같이 프로젝트를 서버에 배포합니다. 서버에 Oracle 클라이언트를 설치할 필요가 없습니다. web.config에 어셈블리 정보를 추가 할 필요가 없습니다.