2016-01-06 2 views
0

Если есть контроль загрузки на моем сайте, определяется как:DevExpress ASPxUploadControl метания Неизвестная ошибка

<dx:ASPxUploadControl ID="ucStatement" runat="server" Width="200px" 
ClientInstanceName="ucStatement" ClientVisible="true" AutoStartUpload="True" 
OnFileUploadComplete="ucStatement_FileUploadComplete" 
OnInit="ucStatement_Init"></dx:ASPxUploadControl> 

ucStatement_FileUploadComplete определяется, как показано ниже, когда ms используется в дальнейшем:

MemoryStream ms; 

protected void ucStatement_FileUploadComplete(object sender, FileUploadCompleteEventArgs e) 
{ 
    if (!e.UploadedFile.IsValid) 
     return; 

    ms = new MemoryStream(); 

    e.UploadedFile.FileContent.CopyTo(ms); 
} 

На сервере DID но после того, как наш специалист по технике безопасности сменил веб-конфигурацию на соответствие некоторым соображениям безопасности, он выдает ошибку:

The server encountered an internal unspecified error that prevented it from fulfilling the request.

Изменения в веб-конфигурации, очевидно, высоко в списке, почему эта функция больше не работает, но они очень незначительные изменения, которые не должны влиять на это.

Рассматривая это из разных публикаций на сайте DevExpress, существует ряд причин, по которым они говорят, что их можно выбросить и как их смягчить. Наиболее актуальным после того https://www.devexpress.com/Support/Center/Question/Details/KA18611

решения вопросов, поднятых там:

1.1 This issue usually occurs when the total request length exceeds the maximum allowed via the "system.web > httpRuntime > maxRequestLength" Web.config key

Я только пытаюсь загрузить ~ 4kb файл и я поставил в веб-конфигурации в соответствии с рекомендациями:

<system.web> 
    <httpRuntime maxRequestLength="4096" /> 
    ... 
</system.web> 

И

<system.webServer> 
    ... 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="30000000" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

Я также не изменит UploadMode - Advanced, поскольку я не хочу применять Silverlight.


EDIT: Дальнейшее исследование показывает метод в DXR.axd под названием GetFakeIframeDocument бросает ошибку, которую я могу найти, на который ссылается только сотрудники DevEx, когда они говорят, что длина запроса превышает maxRequestLength, но это, конечно, не тот случай. Есть ли что-нибудь, что вы можете увидеть в web.config в нижней части этого сообщения, которое отрицает этот параметр? Или вообще не разрешать загрузку?


1.2 This situation can also occur when a web server returns unexpected response/code.

Они советуют менять FileUploadMode к OnPageLoad. Это приводит к такой же ошибке.

1.3 The "The server encountered an internal unspecified error that prevented it from fulfilling the request" error can also be caused by enabling tracing in the Web.config file.

Трассировка не установлен в web.config

1.4 Is it possible to customize/override the "The server encountered an internal unspecified error that prevented it from fulfilling the request" error message?

Они советуют захватывая ошибку, захватив все ошибки CallBack. Я уже делаю это так:

void Application_Start(object sender, EventArgs e) { 
    DevExpress.Web.ASPxWebControl.CallbackError += new EventHandler(Application_Error); 
} 

void Application_Error(object sender, EventArgs e) 
{ 
    HttpServerUtility server = HttpContext.Current.Server; 
    Exception ex = server.GetLastError(); 

    if (ex is HttpUnhandledException) 
     ex = ex.InnerException; 

    ProcessException(ex) 
} 

ProcessException делает целый ряд различных вещей, записывается в журнал событий, записывает данные в файл журнал ошибки и вставляет в базу данных SQL.

Все эти функции работают, если какая-либо другая часть приложения была вызвана ошибкой. Когда элемент управления Upload выдает ошибку, ничего не регистрируется.

Итак, что может быть причиной этого? Почему эта ошибка не может попасть в функцию Application_Error? Что мне делать?

Ниже web.config для полного раскрытия:

<configuration> 
    <configSections> 
    <sectionGroup name="devExpress"> 
     <section name="themes" type="DevExpress.Web.ThemesConfigurationSection, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false" /> 
     <section name="compression" type="DevExpress.Web.CompressionConfigurationSection, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false" /> 
     <section name="settings" type="DevExpress.Web.SettingsConfigurationSection, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false" /> 
     <section name="errors" type="DevExpress.Web.ErrorsConfigurationSection, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <connectionStrings> 
    <add connectionString="xxxxx" name="myConnectionString" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <system.web> 
    <httpCookies httpOnlyCookies="true" requireSSL="true"/> 
    <compilation debug="false" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="DevExpress.Data.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxHtmlEditor.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxSpellChecker.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxTreeList.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxThemes.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxPivotGrid.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Utils.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Office.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.RichEdit.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.SpellChecker.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Charts.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraCharts.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraGauges.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraGauges.v14.2.Presets, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxGauges.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraCharts.v14.2.Web, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Printing.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraReports.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraReports.v14.2.Web, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraPivotGrid.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.PivotGrid.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.XtraScheduler.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxScheduler.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Spreadsheet.v14.2.Core, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     <add assembly="DevExpress.Web.ASPxSpreadsheet.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     </assemblies> 
    </compilation> 
    <authentication mode="Windows" /> 
    <profile> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 
    <sessionState timeout="5"></sessionState> 
    <httpHandlers> 
     <add type="DevExpress.Web.ASPxUploadProgressHttpHandler, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="ASPxUploadProgressHandlerPage.ashx" validate="false" /> 
     <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="DX.ashx" validate="false" /> 
    </httpHandlers> 
    <httpModules> 
     <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" /> 
    </httpModules> 
    <globalization culture="" uiCulture="" /> 
    <httpRuntime maxRequestLength="4096" requestValidationMode="4.0" executionTimeout="110" /> 
    <pages validateRequest="true" clientIDMode="AutoID"> 
     <controls> 
     <add tagPrefix="dx" namespace="DevExpress.Web" assembly="DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" /> 
     </controls> 
    </pages> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
     <machineKey decryption="AES" validation="AES" /> 
     <trust level="Full" /> 
    </system.web> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" /> 
    </modules> 
    <handlers> 
     <add type="DevExpress.Web.ASPxUploadProgressHttpHandler, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="ASPxUploadProgressHandlerPage.ashx" name="ASPxUploadProgressHandler" preCondition="integratedMode" /> 
     <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v14.2, Version=14.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET,POST" path="DX.ashx" name="ASPxHttpHandlerModule" preCondition="integratedMode" /> 
    </handlers> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="30000000" /> 
       <fileExtensions allowUnlisted="true"> 
       </fileExtensions> 
     </requestFiltering> 
    </security> 
     <httpErrors errorMode="Custom" /> 
    <httpProtocol> 
     <customHeaders> 
     <add name="X-Frame-Options" value="DENY" /> 
     <add name="X-Content-Type-Options" value="no sniff"/> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
    <devExpress> 
    <themes enableThemesAssembly="true" styleSheetTheme="" theme="Metropolis" customThemeAssemblies="" /> 
    <compression enableHtmlCompression="false" enableCallbackCompression="true" enableResourceCompression="true" enableResourceMerging="true" /> 
    <settings doctypeMode="Html5" rightToLeft="false" embedRequiredClientLibraries="true" ieCompatibilityVersion="edge" /> 
    <errors callbackErrorRedirectUrl=""/> 
    </devExpress> 
</configuration> 

ответ

0

После того как я понял, что ошибка была брошена в методе GetFakeIframeDocument я искал через web.config, чтобы найти что-нибудь, что могло бы относиться к фреймам. В httpProtocol>customHeaders есть элемент:

<add name="X-Frame-Options" value="DENY" /> 

Это останавливает любую из Iframes отображения содержимого сайта. Изменение value на SAMEORIGIN позволяет сайту использовать iframes для отображения содержимого сайта, но запрещает отображение любых внешних фреймов с содержимого сайта. Все работает, когда я меняю вышеуказанный элемент web.config на:

<add name="X-Frame-Options" value="SAMEORIGIN" /> 
Смежные вопросы