“ เกิดข้อยกเว้นขณะดำเนินการตามคำขอของคุณ นอกจากนี้ยังมีข้อยกเว้นอื่นเกิดขึ้นขณะเรียกใช้หน้าข้อผิดพลาดที่กำหนดเอง…”


105

ฉันกำลังพยายามเผยแพร่เว็บไซต์ 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>

อะไรทำให้เกิดข้อยกเว้นนี้ได้และเหตุใดฉันจึงไม่สามารถทำซ้ำในเครื่องได้


41
ผู้ชายข้อผิดพลาดของคุณทำให้เกิดข้อผิดพลาด นั่นเป็นเรื่องร้ายแรง :)
แจ็ค

ฉันขอแนะนำให้คุณเปิดใช้งานการบันทึกข้อผิดพลาดโดยละเอียดในพอร์ทัลการจัดการและตรวจสอบบันทึกบนไซต์ FTP
Jakub Konecki

มีอะไรในการจัดวางของคุณที่อาจเป็นผู้ร้ายหรือไม่?
drch

@drch ไม่เลยไม่มีอะไรเปลี่ยนแปลงในเค้าโครงเนื่องจากใช้งานได้ล่าสุด
Ilya Kogan

คำตอบ:


215

ขั้นแรกตั้งค่า customErrors = "ปิด" ใน web.config และปรับใช้ใหม่เพื่อรับข้อความแสดงข้อผิดพลาดที่ละเอียดขึ้นซึ่งจะช่วยให้เราวินิจฉัยปัญหาได้ คุณยังสามารถ RDP ในอินสแตนซ์และเรียกดูไซต์จาก IIS ในเครื่องเพื่อดูข้อผิดพลาด

<system.web>
      <customErrors mode="Off" />

ก่อนอื่นให้เดา - คุณมีข้อมูลอ้างอิงบางส่วน (การอ้างอิง Azure SDK ส่วนใหญ่) ที่ไม่ได้ตั้งค่าเป็น Copy Local = true ดังนั้นการอ้างอิงทั้งหมดของคุณจะไม่ถูกปรับใช้

ไปที่ข้อผิดพลาดโดยละเอียดก่อนและอัปเดตคำถามของคุณ

UPDATE: ตัวเลือกที่สองในขณะนี้ที่มีอยู่ใน VS2013 เป็นระยะไกล Debugging บริการคลาวด์หรือเครื่องเสมือน


12
การตั้งค่า customErrors เป็น "ปิด" ในที่สุดก็แสดงข้อยกเว้นที่แท้จริง ฉันกำลังตรวจสอบพวกเขาตอนนี้
Ilya Kogan

1
เนื่องจากส่งผลให้เกิดข้อผิดพลาด IIS คุณจึงสามารถปรับแต่งได้เช่นกันเป็นทางเลือกสำรอง a la benfoster.io/blog/aspnet-mvc-custom-error-pages
drzaus

customErrors ของฉันคือ "ปิด" แต่ฉันยังคงเห็นข้อความ "ขออภัยเกิดข้อผิดพลาดขณะดำเนินการตามคำขอของคุณ" ข้อผิดพลาด คุณช่วยฉันที่นี่ได้ไหม @Ilya Kogan
GuiPab

1
+1 เนื่องจากการตั้งค่า customerror = off ทำให้ฉันเห็นว่าเกิดข้อผิดพลาดเนื่องจากฉันใช้โซลูชันเว็บไซต์เป็นเทมเพลตสำหรับเว็บไซต์อื่นและลืมล้างโฟลเดอร์ bin นั่นคือปัญหาการทำซ้ำ
Paul Zahra

8

ฉันไม่ได้ใช้ Azure แต่ฉันได้รับข้อผิดพลาดเดียวกันในเครื่อง การใช้<customErrors mode="Off" />ดูเหมือนจะไม่มีผลใด ๆ แต่การตรวจสอบบันทึกแอปพลิเคชันใน Event Viewer พบคำเตือนจาก ASP.NET ซึ่งมีรายละเอียดทั้งหมดที่ฉันต้องการเพื่อแก้ไขปัญหา


4

หากคุณเพิ่มสิ่งนี้ลงในไฟล์การแปลง web.config ของคุณคุณยังสามารถตั้งค่าตัวเลือกการเผยแพร่บางอย่างเพื่อเปิดใช้งานหรือปิดใช้งานการดีบัก:

<system.web>
    <customErrors mode="Off" defaultRedirect="~/Error.aspx" xdt:Transform="Replace"/>
</system.web>

2

เมื่อเผยแพร่ไป IIS โดยเว็บปรับใช้ฉันเพียงแค่การตรวจสอบไฟล์เผยแพร่ตัวเลือกและดำเนินการ ตอนนี้ใช้งานได้แล้ว! หลังจากปรับใช้แล้วไม่จำเป็นต้องเลือกช่องทำเครื่องหมาย ฉันไม่คิดว่านี่จะเป็นวิธีแก้ปัญหาสำหรับทุกคน แต่มันเป็นสิ่งเดียวที่ฉันต้องทำเพื่อแก้ปัญหาของฉัน โชคดี.


1

ฉันมีปัญหานี้เฉพาะกับredirectMode="ResponseRewrite"(ใช้redirectMode="ResponseRedirect"งานได้ดี) และไม่มีวิธีแก้ไขปัญหาใด ๆ ข้างต้นที่ช่วยแก้ไขปัญหาได้ อย่างไรก็ตามเมื่อฉันเปลี่ยน "Managed Pipeline Mode" ของพูลแอปพลิเคชันของเซิร์ฟเวอร์จาก "Classic" เป็น "Integrated" แล้วหน้าข้อผิดพลาดที่กำหนดเองก็ปรากฏขึ้นตามที่คาดไว้


-2

คุณสามารถใช้ Oracle.ManagedDataAccess.dll แทน (ดาวน์โหลดจาก Oracle) รวม dll นั้นไว้ในโปรเจ็กต์ bin dir ของคุณเพิ่มการอ้างอิงถึง dll นั้นในโปรเจ็กต์ ในโค้ด "using Oracle.MangedDataAccess.Client" ปรับใช้โครงการไปยังเซิร์ฟเวอร์ตามปกติ ไม่จำเป็นต้องติดตั้ง Oracle Client บนเซิร์ฟเวอร์ ไม่จำเป็นต้องเพิ่มข้อมูลการประกอบใน web.config


3
Oracle เข้ามาในภาพนี้ได้อย่างไร?
Aamol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.