Имя: Пароль:
1C
1С v8
Server Error in Application. A potentially dangerous Request.
0 Evrepid
 
14.05.13
16:00
Server Error in Application. A potentially dangerous Request./ Серверная ошибка в приложении. Потенциально опасный запрос.

Может кому пригодится в работе.

При работе в управляемом приложении через веб сервис пользователь иногда получает сообщение:
Server Error in '/' Application

С совершенно не вразумительным текстом описания ошибки и рекомендацией как поступить при этом.
Как решать указанную проблему?

Разделим саму проблему на две части:
Проблема Веб сервиса и проблема 1С.
Проблему 1С можно обнаружить и устранить, если запустить режим отладки Тонкого клиента и проверить работу управляемых форм, ответственных за место в котором происходит ошибка.

Здесь мы будем рассматривать половину относящуюся к Веб серверу.

В некоторых источниках пишут что указанная ошибка является характерной для хакерских атак, но в нашем конкретном случае о такой атаке речь идти не может, т.к. проблема возникает при обращении к сервису не из вне сети, а из интранет.

В переводе на русский язык ошибка звучит как: "Ошибка приложения вызванная на сервере. Текущие настройки сервера для этого приложения ошибочны, приложение было остановлено по соображениям безопасности в привентивном режиме."
Рекомендация данная ниже отключает режим вывода сообщений, но не дает ответа как устранить причину появления ошибки, при условии правильности работы кода 1С во всех других режимах.
немного манипуляций и страница дает уже более понятную информацию:

Если ранее проблема была не понятна, то сейчас более понятно что ошибка относится именно к веб серверу и что вызывается именно привентивным прекращением работы приложения веб сервером.

Проблема же заключается в том, что .net имеет режим валидации исполняемого сервером кода, вот эта валидация и приводит к появлению указанной ошибки.

Для устранения ошибки рекомендуется выполнить настройки вебсервера:

1. ValidateRequest = "False"
например,если в конфигурационном файле у вас уже есть:
<% @ Page Language = "VB" AutoEventWireup = "False" Codebehind = "MyForm.aspx.vb" наследует = "Proj.MyForm"%>
то должно стать:

<% @ Page Language = "VB" AutoEventWireup = "False" Codebehind = "MyForm.aspx.vb" наследует = "Proj.MyForm" ValidateRequest = "False"%>

В более поздних версиях Visual Studio значение этого свойства можно получить на странице свойств, поэтому просто установите " ValidateRequest " на " False". Любым способом установки можно получить тот же результат.

Примечание:

1.1. Если вы используете. NET 4, то вам необходимо добавить requestValidationMode = "2.0" в HttpRuntime раздел конфигурацииweb.config файла. Например:

<httpRuntime requestValidationMode="2.0"/>

Если у вас еще нет раздела HttpRuntime в web.config, то это можно сделать такие настройки в разделе <system.web>.

     Чтобы глобально выключить проверку запросов добавьте следующую строку в вашем web.config файла: <pages validateRequest="false" /> раздела <system.web>.
2. Установить  EnableEventValidation = "False" запретим проверку корректности события.
3. Установить EnableViewState = "False"
и
4. Установить нужное значение в ExecutionTimeout. В моем случае строка выглядит так: ExecutionTimeOut = "20"

Это верно для: NET 1.1,. NET 2,. NET 3.5 и. NET 4.0
Использованы материалы интернет форумов и сайтов:
http://www.cryer.co.uk/brian/mswinswdev/ms_vbnet_server_error_potentially_dangerous.htm
http://social.msdn.microsoft.com/Forums/en-US/windowsazuresecurity/thread/3dbedb02-e6b6-4e44-8a94-39225f2b41c4
http://forums.asp.net/t/1775186.aspx/1
http://forums.asp.net/t/1825664.aspx/1
http://www.west-wind.com/weblog/posts/2010/Aug/19/RequestValidation-Changes-in-ASPNET-40
Независимо от того, куда вы едете — это в гору и против ветра!