Ошибки сервиса message an error has occurred

| Воскресенье, 3 марта, 2013

Метки: ASP.NET Web API Комментарии: 0

ASP.NET Web API упрощает разработку HTTP-сервисов, а также предоставляет много способов возврата полных и информативных сообщений об ошибках для различных ситуаций. Рассмотрим эти возможности.

Для начала, посмотрим как выглядит обычное сообщение об ошибке для Web API:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'.", 
"MessageDetail": "No type was found that matches the controller named 'Foo'." 
}

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

Но если указать в запросе в заголовке Accept «text/html», то ответ будет в xml виде:

<Error> 
  <Message>No HTTP resource was found that matches the request URI 'http://localhost/Foo'.</Message> 
  <MessageDetail>No type was found that matches the controller named 'Foo'.</MessageDetail> 
</Error>

Этот простой формат предоставляет информацию клиентам об ошибках, что дает возможность делать запись в журнал, либо отсылать отчеты на email.

HttpError

Примеры приведенные выше — это объекты HttpError, сериализованные с помощью Json.NET и DataContactSerializer.

Тип HttpError определяет содержательный и расширяемый способ передачи информации об ошибках между различными платформами. Фактически, это просто класс Dictionary, который предоставляет еще несколько вспомогательных конструкторов для создания сообщений об ошибках, исключениях и некорректных состояниях модели.

public HttpError();
public HttpError(string message);
public HttpError(Exception exception, bool includeErrorDetail);
public HttpError(ModelStateDictionary modelState, bool includeErrorDetail);

Так выглядят исключения в формате JSON:

{ 
"Message": "An error has occurred.", 
"ExceptionMessage": "Index was outside the bounds of the array.", 
"ExceptionType": "System.IndexOutOfRangeException", 
"StackTrace": "   at WebApiTest.TestController.Post(Uri uri) in c:TempWebApiTestWebApiTestTestController.cs:line 18rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClassf.<GetExecutor>b__9(Object instance, Object[] methodParameters)rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)rn   at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)" 
}

Так некорректная модель:

{ 
  "Message": "The request is invalid.", 
  "ModelState": 
   { 
       "s": [ "Required property 's' not found in JSON. Path '', line 1, position 2."  ] 
   }
} 

Можно создавать и собственные виды ошибок в классе HttpError, например так:

public HttpResponseMessage Get()
{
   HttpError myCustomError = new HttpError("My custom error message") { { "CustomErrorCode", 37 } };
   return Request.CreateErrorResponse(HttpStatusCode.BadRequest, myCustomError);
}

Результат будет таким:

{ 
  "Message": "My custom error message", 
  "CustomErrorCode": 37 
}

В этом примере метод возвращает ошибку с помощью Request.CreateErrorMessage. Пользовательская ошибка обернута в класс HttpResponseMessage. Это рекомендованный способ создания ответов c сообщениями об ошибках. Ниже приведены расширяемые методы для возврата такой информации:

public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, Exception exception);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, HttpError error);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, ModelStateDictionary modelState);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message, Exception exception);

Но можно и просто генерировать любое исключение в методе действия. Web API автоматически перехватывает исключение, конвертирует в ответ сервера с кодом 500 (Internal Server Error) и возвращает сообщение в точно таком же формате, как и с методом CreateErrorResponse.

HttpResponseException

Но как быть, если нужно вернуть ошибку в методе, который возвращает объекты не являющиеся классами HttpResponseMessage? Тут на помощь приходит класс HttpResponseException. Данный тип исключения определен специально для Web API и служит двум целям:

  1. Позволяет возвращать специальные ответы HTTP из методов, которые не возвращают HttpResponseMethod.
  2. Упрощает код в методах Web API, выполняя вывод ответа сервера с информацией об ошибке немедленно.

Технически, HttpResponseException может быть использован для возврата любых http-ответов, но особенно полезен данный класс для ошибок. Это позволяет нам писать методы следующим образом:

public Person Get(int id)
{
   if (!_contacts.ContainsKey(id))
   {
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, String.Format("Contact {0} not found.", id)));
   }
   return _contacts[id];
}

Метод предназначен для возврата типа Person, но мы можем также и вернуть пользовательскую ошибку в случае отсутствия возвращаемого значения.

Подробное описание ошибок

В начале статьи в примере упоминался параметр «includeErrorDetails» в конструкторе класса HttpError. Это для случаев, когда клиенту нужно предоставить отладочную информацию, для разрешения проблем на сервере. По умолчанию подробная информация не высылается удаленным клиентам, но предоставляется клиентам на локальном компьютере. В самом первом примере статьи, локальный клиент получит:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'.", 
"MessageDetail": "No type was found that matches the controller named 'Foo'." 
}

А до удаленного клиента дойдет только:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'." 
}

MessageDetails содержит специфичную информацию, которую удаленные клиенты в большинстве случаев видеть не должны. То есть ошибки содержащие отладочную информацию (exception message, exception type, stack trace) не предоставляют подробное описание по умолчанию, но ошибки состояния моделей (кроме исключений) подробно отсылаются и удаленным клиентам.

Явно задавать возврат подробной информации можно в объекте HttpConfiguration:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;

Как было упомянуто выше, значение по умолчанию LocalOnly.

Обработка ошибок для некорректных моделей

Еще один распространенный способ использования обработки ошибок Web API – это немедленный возврат ошибки в случае некорректной модели. Для этого лучше всего реализовать следующий фильтр метода действия:

public class ValidationFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            actionContext.Response = 
                 actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,   
                 actionContext.ModelState);
         }
     }
}

Можно прописать этот фильтр для каждого метода а можно зарегистрировать его глобально сразу для всех методов:

config.Filters.Add(new ValidationFilterAttribute());

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

Никто еще не оставил здесь комментарий.

Basically:

Use IncludeErrorDetailPolicy instead if CustomErrors doesn’t solve it for you (e.g. if you’re ASP.NET stack is >2012):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Note: Be careful returning detailed error info can reveal sensitive information to ‘hackers’. See Simon’s comment on this answer below.

TL;DR version

For me CustomErrors didn’t really help. It was already set to Off, but I still only got a measly an error has occurred message. I guess the accepted answer is from 3 years ago which is a long time in the web word nowadays. I’m using Web API 2 and ASP.NET 5 (MVC 5) and Microsoft has moved away from an IIS-only strategy, while CustomErrors is old skool IIS ;).

Anyway, I had an issue with products that I didn’t have locally. And then found I couldn’t see the errors in Chrome’s Network tab like I could on my dev machine. In the end, I managed to solve it by installing Chrome on my production server and then browsing to the app there on the server itself (e.g. on ‘localhost’). Then more detailed errors appeared with stack traces and all.

Only afterward did I find this article from Jimmy Bogard (Note: Jimmy is mr. AutoMapper!). The funny thing is that his article is also from 2012, but in it, he already explains that CustomErrors doesn’t help for this anymore, but that you CAN change the ‘Error detail’ by setting a different IncludeErrorDetailPolicy in the global WebApi configuration (e.g. WebApiConfig.cs):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Luckily he also explains how to set it up that web API (2) DOES listen to your CustomErrors settings. That’s a pretty sensible approach, and this allows you to go back to 2012 :P.

Note: The default value is ‘LocalOnly’, which explains why I was able to solve the problem the way I described, before finding this post. But I understand that not everybody can just remote to production and startup a browser (I know I mostly couldn’t until I decided to go freelance AND DevOps).

An unexpected error has occurred что делатьОшибка 0xc00000e9 «Возникла неожиданная ошибка ввода-вывода» (иногда с указанием файла, например: BootBCD или «An unexpected I/O error has occurred» — достаточно распространенная проблема, возникающая при загрузке Windows 10 (здесь она появляется на синем экране «Восстановление»), 8.1 или Windows 7, а в некоторых случаях и при чистой установке системы с флешки или компакт диска.

В этой инструкции подробно о том, чем может быть вызвана неожиданная ошибка ввода-вывода 0xc00000e9 и как её исправить в зависимости от причин возникновения. Если ошибка с этим кодом сообщает о том, что «не удалось загрузить операционную систему, так как файл системного реестра отсутствует или содержит ошибки», используйте методы из этой статьи, лучше — точки восстановления при их наличии: Восстановление реестра Windows 10.

Содержание

  • Возникла неожиданная ошибка ввода-вывода 0xc00000e9 — как исправить
  • Что это может означать?
  • Как исправить ситуацию с проблемой запуска Visual Basic?
  • Что советуют при проблеме с Windows 7?
  • MwFix: что это за программа?
  • Как использовать MwFix
  • Использование редактирования автозагрузки для игнорирования ошибки
    • Переход через окно «конфигурация системы»
    • Использование меню «пуск»
    • Применение поисковой строки
    • Использование системного реестра
    • Применение спецпрограмм
    • Все просто!
    • Рекомендуем к прочтению

Возникла неожиданная ошибка ввода-вывода 0xc00000e9 — как исправить

Наиболее частой причиной появления ошибки 0xc00000e9 во время загрузки или установки Windows является проблема с работой SATA-устройств или ошибки/неисправности жесткого диска. Чаще всего речь идет о системном жестком диске, но это не всегда так: например, неисправность второго физического диска или DVD-привода также может приводить к такому же результату.

An unexpected error has occurred что делать

В зависимости от того, при каких условиях возникает «Неожиданная ошибка ввода-вывода» или что предшествовало её появлению, возможны следующие подходы к решению:

  1. Если ошибка возникает однократно после завершения работы, а при повторном включении не появляется, а на компьютере или ноутбуке установлена Windows 10 или 8.1, попробуйте отключить быстрый запуск, см. Быстрый запуск Windows 10 (тот же метод подойдет и для 8-ки).
  2. Попробуйте отключить все накопители, кроме системного диска (включая привод DVD, флешки, карты памяти), а если внутри ПК или ноутбука проводились какие-либо работы (например, после чистки от пыли, установки нового оборудования или просто в тех случаях, когда корпус ПК всегда открыт) — перепроверить подключение системного жесткого диска или SSD (при SATA-подключении — как со стороны самого диска, так и со стороны материнской платы, при возможности также следует попробовать использовать другой кабель и разъем SATA на материнской плате).
  3. На экране с ошибкой вам будет предложено нажать F8 для того, чтобы открыть параметры загрузки. Нажмите F8 (или Fn+F8) и проверьте, загружается ли компьютер в безопасном режиме. Если загрузка прошла успешно, откройте свойства «Диска C» и выполните проверку на вкладке «Сервис».
  4. Если безопасный режим не запускается, можно попробовать загрузиться с загрузочной флешки с Windows, нажать клавиши Shift+F10 (или Shift+Fn+F10 на некоторых ноутбуках) и использовать командную строку для проверки жесткого диска на ошибки с помощью chkdsk (учитывайте, что при загрузке диск может иметь букву, отличающуюся от C, используйте Diskpart, чтобы определить текущую букву системного раздела диска, также в некоторых случаях может быть необходимым выполнить проверку скрытых разделов). Также вы можете использовать утилиты проверки жестких дисков с какого-либо LiveCD.
  5. Попробуйте использовать загрузочную флешку с вашей версией Windows для восстановления загрузчика системы, см.: Восстановление загрузчика Windows 10, Восстановление загрузчика Windows 7.
  6. Перепроверьте параметры БИОС, в частности, режим работы SATA (обычно — AHCI) и режим загрузки (ошибка может быть вызвана переключением из режима UEFI в Legacy или наоборот, когда система на диске установлена в ином режиме).

Обычно, что-то из перечисленного помогает в решении проблемы, однако, если в вашем случае этого не произошло, возможно, имеет смысл попробовать переустановить Windows на компьютере.

Также учитывайте тот факт, что ошибка может быть и следствием аппаратных проблем с жестким диском, особенное если вы роняли ноутбук, жесткий диск в последнее время часто издавал странные звуки или вам регулярно приходилось экстренно выключать компьютер (из розетки или кнопкой питания) во время работы.

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

Что за ошибка 0xc00000e9? И подскажите как её исправить. При установке Windows вылетает ошибка и текст :
This error can be caused by unplugging a removable storage device such as an external USB drive while the device is in use, or by faulty hardware such as a hard drive or CD-ROM drive that is failing. make sure any removable storage is properly connected and then restart your computer.
if you continue to receive this error message, contact the hardware manufacturer.

Status: 0xc00000e9
Info: An unexpected I/O error has occurred. 8 лет

An unexpected error has occurred что делать

Unexpected error quitting – весьма интересная ошибка. Во-первых, она может проявляться при запуске самых разных программ. Некоторые сталкиваются с ней после установки Windows 7. Другие пользователи сообщают о том, что столкнулись с аналогичной проблемой при запуске Visual Basic. Во-вторых, не всегда эта неприятность прерывает доступ к программе. Если с VB это действительно так, то в случае с Виндой часто достаточно просто закрыть сообщение с ошибкой, чтобы продолжить запуск системы.

Естественно, у людей возникает вопрос, что делать? Мы решили разобраться с этой ситуацией и специально подготовили материал на эту тему.

Что это может означать?

Проблема в том, что точной причины возникновения этой ошибки никто не знает. Перевод на русский язык этой фразы звучит так: «неожиданная ошибка выхода».

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

An unexpected error has occurred что делать

Учитывая все выше описанное, действительно сложно иногда понять – как исправить возникший сбой.

На самом деле решение есть. И мы рассмотрим его в двух отдельных случаях:

  • Для операционной системы Windows 7;
  • И при попытке запуска Visual Basic.

Начнем со второго.

Как исправить ситуацию с проблемой запуска Visual Basic?

Итак, предыстория следующая:

  • Один человек достаточно активно использовал Visual Basic в своих целях;
  • Он спокойно осуществлял запуск программы и вообще не сталкивался с какими-то сбоями;
  • И тут, в один явно не прекрасный момент, при попытке входа, на экране появляется вот это самое сообщение, сопровождаемое каким-то шестизначным кодом.

An unexpected error has occurred что делать

Естественно, этот пользователь обратился за помощью к другим – на одном из специализированных форумов. Единственное, что ему посоветовали – выполнить полную переустановку этого продукта. Программа была удалена и установлена заново. Но при попытке входа ситуация полностью повторилась.

Человек начал думать, в чем может быть причина. И вспомнил, что перед первым появлением на экране этого неприятного сообщения у его компьютера начались серьезные проблемы. Пришлось многое восстанавливать и переустанавливать. И вроде все начало работать как раньше. Кроме VB.

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

Сама сервисная служба называется так: DCOM Server Application Launcher.

An unexpected error has occurred что делать

Находится она обычно по следующему адресу: C:WINDOWSsystem32svchost -k DcomLaunch.

Возможно, эта информация окажется для вас полезной.

Что советуют при проблеме с Windows 7?

Как показывает собранная информация, «Unexpected error quitting» возникает следующим образом:

  • После полноценной переустановки Семерки от Майкрософт;
  • Во время непосредственной загрузки системы;
  • Практически всегда можно закрыть окно с этим сообщением и продолжить вход в операционку.

В качестве ответа на подобный запрос иногда советуется обратить внимание на какие-то драйвера, которые оказываются несовместимыми с используемой системой. Но проблема в том, что ОС только что была переустановлена. И, если и была инсталляция драйверов, то только самой системой, а не в ручном режиме со стороны пользователя.

В итоге, предлагается два действенных варианта:

  • Исключить из процесса автозагрузки Виндовс проблемный элемент, если пользователь знает, что именно нужно отключить для предотвращения возникновения сообщения с ошибкой;
  • Воспользоваться специальным «лечащим инструментом», который называется MwFix.

Разберемся с каждым из этих вариантов более подробно.

MwFix: что это за программа?

MwFix – аббревиатура, которая расшифровывается следующим образом: Microsoft Windows Fix. То есть, если на русском языке, – исправление для Майкрософт Виндовс.

An unexpected error has occurred что делать

Фактически, это специально созданная утилита, которая никак не связана с установкой различных обновляющих системных пакетов, и предназначена для одной цели – избавить компьютер пользователя от разнообразных сбоев, ошибок и неприятностей.

Выполняя поиск этой утилиты в интернете, необходимо знать несколько нюансов:

  • Она полностью англоязычная и версий на русском языке не существует. Поэтому придется как-то разбираться. Или использовать различные переводчики;
  • Иногда на некоторых сайтах предлагают скачать эту программу, дополнительно наполняя содержимое архива различным, часто не нужным ПО. Например, если невнимательно осуществить процесс инсталляции, то после его завершения можно обнаружить на рабочем столе печально известный браузер Амиго, Одноклассники и много другого мусора. В том числе и обилие рекламы. Поэтому всегда стоит внимательно прочесть всю информацию. И снять галочки в местах, предлагающих выполнить установку дополнительных продуктов;
  • Существует три версии этой утилиты. Первая (v1.2) – для Семерки. Вторая (v2.2) – для Виндовс 8. И последняя – для десятки. Она имеет обозначение «10». Так что стоит внимательно выбирать вариант, чтобы Фикс оказался эффективным.

Ну а теперь перейдем к описанию самой программы.

Как использовать MwFix

Естественно, его нужно сначала найти в интернете. Затем – скачать и запустить. После этого на экране компьютера появится рабочее окно, разделенной на две части:

  1. Левая – перечень инструментов, которые можно использовать.
  2. Правая – описание выбранного пользователя инструмента с активными кнопками, позволяющими запускать то или иное исправление.

Что доступно в левой части рабочего окна программы:

  • Welcome. На самом деле этот раздел создан не ради приветствия нового пользователя. Зайдя сюда, юзер сможет запустить инструмент sfc, предназначенный для проверки целостности файлов системы. А также в этом месте располагается утилита, позволяющая создавать так называемые точки восстановления. Собственно, этим вариантом стоит воспользоваться в первую очередь. Ведь иногда лечение может привести к ухудшению состояния. И хорошо, когда есть возможность откатить все обратно;
  • Windows Explorer. Не поверите, но встроенный интернет-браузер тоже сбоит иногда. И в этом разделе собраны инструменты, решающие проблемы именно с этой программой;
  • Internet & Connectivety. Следует воспользоваться этим пунктом меню, если возникли какие-то неприятности при попытке использования сети;
  • Windows Media. Название говорит само за себя – позволяет решать проблемы, возникающие при работе фирменного Windows Media Player;
  • System Tools. Инструменты, предназначенные для избавления от системных сбоев;
  • Additional fixes. Набор дополнительных возможностей.

An unexpected error has occurred что делать

В конце несколько важных рекомендаций:

  • Не желательно использовать сразу все «Фиксы» одновременно или поочередно. Рекомендуется действовать последовательно: использовали один инструмент, перезапустили компьютер, проверили результат – если он отрицательный, перешли к следующему исправлению и так далее;
  • Поиск MwFix в Интернете нужно делать крайне осторожно. К сожалению, на многих сайтах людям предлагают не эту важную утилиту, а ее подмену с вирусами и другими неприятностями внутри. В лучшем случае придется разбираться с уничтожением большого числа установленного автоматическим образом ПО. Или с обилием рекламы, которая будет лезть буквально из всех углов. Поэтому стоит выполнять скачивание только с проверенных источников. Для этого можно почитать отзывы. И не надо никуда отсылать платные СМС, чтобы получить доступ к архиву – вас явно пытаются обмануть.

Использование редактирования автозагрузки для игнорирования ошибки

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

Доступ и взаимодействие с автозагрузкой можно осуществить несколькими способами. Рассмотрим основные из них:

Переход через окно «конфигурация системы»

Для этого следует выполнить следующие операции:

  • Одновременно на клавиатуре нажать две кнопки: Win и R; An unexpected error has occurred что делать
  • Это активирует спецокно «выполнить»;
  • Вбить в него команду: msconfig. Не забыть нажать на «ок» или Enter;
  • Появится окно «конфигурация системы» с пятью вкладками. Одна из них – автозагрузка.

An unexpected error has occurred что делать

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

Использование меню «пуск»

Если нажать на кнопочку «Пуск», то активируется системная панель, где можно увидеть множество программ, инструментов, приложений. Внимательно просмотрите весь список. В нем обязательно обнаружится папка автозагрузки. Ее можно открыть и посмотреть перечень присутствующих вариантов. Обычно здесь располагаются различные не системные программы, которые могут загружаться одновременно с операционкой. Конечно же, их можно удалять из списка в случае необходимости.

Применение поисковой строки

В автозагрузочную папку можно попасть еще одним способом:

  • Нажать на «Пуск» и осуществить запуск поисковой строки системы;
  • Вбить в нее shell:startup.

В конце просто нажмите на Enter и это позволит активировать нужную папочку. А также точно увидеть ее расположение на жестком диске, если обратить внимание на так называемую адресную строку.

Использование системного реестра

  • Опять одновременно зажимается комбинация ВИН+R;
  • Вводится в строке «Выполнить» команда regedit;
  • Активируется окно реестра. В его левой части – дерево каталогов;
  • Чтобы попасть в автозагрузочный раздел, необходимо совершить следующее путешествие: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun

Дальше – смотрите список. Если что-то нужно выключить временно или вообще убрать из автозагрузки, нажимаете на названии правой кнопочкой компьютерной мышки и выбираете требуемое действие из списка.

Применение спецпрограмм

Безусловно, многие сразу же вспомнили про CCleaner. Действительно, функционал этой программы предоставляет доступ к списку системных автозагрузок:

  • Запускаем ПО;
  • В левой части окна выбираем «Сервис»;
  • Появится дополнительный список. В нем находим нужный нам вариант;
  • Можно будет «включить», «выключить» или «удалить».

An unexpected error has occurred что делать

Все просто!

Еще одно интересное ПО – Autorun Organizer. Как им пользоваться:

  • Скачиваем, устанавливаем, запускаем;
  • В верхней части экрана кликаем на «пользовательские»;
  • Отмечаем галочками все варианты из выпадающего списка;
  • Смотрим доступный перечень. Находим проблемный процесс;
  • Его можно удалить. Но рекомендуется для начала попробовать другой вариант. А именно – оптимизировать его.

Если после перезагрузки ничего не поменялось, то можно вернуться и осуществить полноценное удаление из автозапуска. Или – временно отключить. Такая функция также присутствует в этом программном обеспечении.

Если же после удаления стало еще хуже, то можно опять активировать эту программу, перейти в «Центр отмены изменений», вернуть все обратно. Этот подраздел находится в правом нижнем углу рабочего экрана.

Студворк — интернет-сервис помощи студентам

Привет.
Помогите пожалуйста разобраться. Есть action на API контроллере

C#
1
2
3
4
5
6
7
8
9
10
[RoutePrefix("client")]
controller
        [HttpPost]
        [Route("find-client-by-xml")]
        public async Task<IHttpActionResult> FindClientByReqs(FindClient request)
        {
            ...
 
            return Ok(request.TaxId);
        }

который принимает объект FindClient:

C#
1
2
3
4
5
6
    [XmlRoot("find")]
    public class FindClient
    {
        [JsonProperty("tax_number")]
        [XmlElement("TaxNumber")]
        public string TaxId { get; set; }

вызываю так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:60308/client/find-client-by-xml");
            byte[] bytes;
            bytes = System.Text.Encoding.ASCII.GetBytes("<?xml version="1.0"?><find xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><TaxNumber>123</TaxNumber></find>");
            request.ContentType = "text/xml; encoding='utf-8'";
            request.ContentLength = bytes.Length;
            request.Method = "POST";
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(bytes, 0, bytes.Length);
            requestStream.Close();
 
            HttpWebResponse response;
            response = (HttpWebResponse)request.GetResponse();

и здесь в response приходит ошибка:

XML
1
2
3
4
5
- <Error>
  <Message>An error has occurred.</Message> 
    <ExceptionMessage>Ссылка на объект не указывает на экземпляр объекта.</ExceptionMessage> 
    <ExceptionType>System.NullReferenceException</ExceptionType> 
  </Error>

То есть при попытке получить данные из тела запроса получаем System.NullReferenceException. Из-за чего может быть такое?

Добавлено через 33 минуты
Разобрался:

C#
1
2
            XmlMediaTypeFormatter xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
            xml.UseXmlSerializer = true;

Basically:

Use IncludeErrorDetailPolicy instead if CustomErrors doesn’t solve it for you (e.g. if you’re ASP.NET stack is >2012):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Note: Be careful returning detailed error info can reveal sensitive information to ‘hackers’. See Simon’s comment on this answer below.

TL;DR version

For me CustomErrors didn’t really help. It was already set to Off, but I still only got a measly an error has occurred message. I guess the accepted answer is from 3 years ago which is a long time in the web word nowadays. I’m using Web API 2 and ASP.NET 5 (MVC 5) and Microsoft has moved away from an IIS-only strategy, while CustomErrors is old skool IIS ;).

Anyway, I had an issue with products that I didn’t have locally. And then found I couldn’t see the errors in Chrome’s Network tab like I could on my dev machine. In the end, I managed to solve it by installing Chrome on my production server and then browsing to the app there on the server itself (e.g. on ‘localhost’). Then more detailed errors appeared with stack traces and all.

Only afterward did I find this article from Jimmy Bogard (Note: Jimmy is mr. AutoMapper!). The funny thing is that his article is also from 2012, but in it, he already explains that CustomErrors doesn’t help for this anymore, but that you CAN change the ‘Error detail’ by setting a different IncludeErrorDetailPolicy in the global WebApi configuration (e.g. WebApiConfig.cs):

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy 
= IncludeErrorDetailPolicy.Always;

Luckily he also explains how to set it up that web API (2) DOES listen to your CustomErrors settings. That’s a pretty sensible approach, and this allows you to go back to 2012 :P.

Note: The default value is ‘LocalOnly’, which explains why I was able to solve the problem the way I described, before finding this post. But I understand that not everybody can just remote to production and startup a browser (I know I mostly couldn’t until I decided to go freelance AND DevOps).

| Воскресенье, 3 марта, 2013

Метки: ASP.NET Web API Комментарии: 0

ASP.NET Web API упрощает разработку HTTP-сервисов, а также предоставляет много способов возврата полных и информативных сообщений об ошибках для различных ситуаций. Рассмотрим эти возможности.

Для начала, посмотрим как выглядит обычное сообщение об ошибке для Web API:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'.", 
"MessageDetail": "No type was found that matches the controller named 'Foo'." 
}

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

Но если указать в запросе в заголовке Accept «text/html», то ответ будет в xml виде:

<Error> 
  <Message>No HTTP resource was found that matches the request URI 'http://localhost/Foo'.</Message> 
  <MessageDetail>No type was found that matches the controller named 'Foo'.</MessageDetail> 
</Error>

Этот простой формат предоставляет информацию клиентам об ошибках, что дает возможность делать запись в журнал, либо отсылать отчеты на email.

HttpError

Примеры приведенные выше — это объекты HttpError, сериализованные с помощью Json.NET и DataContactSerializer.

Тип HttpError определяет содержательный и расширяемый способ передачи информации об ошибках между различными платформами. Фактически, это просто класс Dictionary, который предоставляет еще несколько вспомогательных конструкторов для создания сообщений об ошибках, исключениях и некорректных состояниях модели.

public HttpError();
public HttpError(string message);
public HttpError(Exception exception, bool includeErrorDetail);
public HttpError(ModelStateDictionary modelState, bool includeErrorDetail);

Так выглядят исключения в формате JSON:

{ 
"Message": "An error has occurred.", 
"ExceptionMessage": "Index was outside the bounds of the array.", 
"ExceptionType": "System.IndexOutOfRangeException", 
"StackTrace": "   at WebApiTest.TestController.Post(Uri uri) in c:\Temp\WebApiTest\WebApiTest\TestController.cs:line 18rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClassf.<GetExecutor>b__9(Object instance, Object[] methodParameters)rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)rn   at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)" 
}

Так некорректная модель:

{ 
  "Message": "The request is invalid.", 
  "ModelState": 
   { 
       "s": [ "Required property 's' not found in JSON. Path '', line 1, position 2."  ] 
   }
} 

Можно создавать и собственные виды ошибок в классе HttpError, например так:

public HttpResponseMessage Get()
{
   HttpError myCustomError = new HttpError("My custom error message") { { "CustomErrorCode", 37 } };
   return Request.CreateErrorResponse(HttpStatusCode.BadRequest, myCustomError);
}

Результат будет таким:

{ 
  "Message": "My custom error message", 
  "CustomErrorCode": 37 
}

В этом примере метод возвращает ошибку с помощью Request.CreateErrorMessage. Пользовательская ошибка обернута в класс HttpResponseMessage. Это рекомендованный способ создания ответов c сообщениями об ошибках. Ниже приведены расширяемые методы для возврата такой информации:

public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, Exception exception);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, HttpError error);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, ModelStateDictionary modelState);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message);
public static HttpResponseMessage CreateErrorResponse(this HttpRequestMessage request, HttpStatusCode statusCode, string message, Exception exception);

Но можно и просто генерировать любое исключение в методе действия. Web API автоматически перехватывает исключение, конвертирует в ответ сервера с кодом 500 (Internal Server Error) и возвращает сообщение в точно таком же формате, как и с методом CreateErrorResponse.

HttpResponseException

Но как быть, если нужно вернуть ошибку в методе, который возвращает объекты не являющиеся классами HttpResponseMessage? Тут на помощь приходит класс HttpResponseException. Данный тип исключения определен специально для Web API и служит двум целям:

  1. Позволяет возвращать специальные ответы HTTP из методов, которые не возвращают HttpResponseMethod.
  2. Упрощает код в методах Web API, выполняя вывод ответа сервера с информацией об ошибке немедленно.

Технически, HttpResponseException может быть использован для возврата любых http-ответов, но особенно полезен данный класс для ошибок. Это позволяет нам писать методы следующим образом:

public Person Get(int id)
{
   if (!_contacts.ContainsKey(id))
   {
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, String.Format("Contact {0} not found.", id)));
   }
   return _contacts[id];
}

Метод предназначен для возврата типа Person, но мы можем также и вернуть пользовательскую ошибку в случае отсутствия возвращаемого значения.

Подробное описание ошибок

В начале статьи в примере упоминался параметр «includeErrorDetails» в конструкторе класса HttpError. Это для случаев, когда клиенту нужно предоставить отладочную информацию, для разрешения проблем на сервере. По умолчанию подробная информация не высылается удаленным клиентам, но предоставляется клиентам на локальном компьютере. В самом первом примере статьи, локальный клиент получит:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'.", 
"MessageDetail": "No type was found that matches the controller named 'Foo'." 
}

А до удаленного клиента дойдет только:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/Foo'." 
}

MessageDetails содержит специфичную информацию, которую удаленные клиенты в большинстве случаев видеть не должны. То есть ошибки содержащие отладочную информацию (exception message, exception type, stack trace) не предоставляют подробное описание по умолчанию, но ошибки состояния моделей (кроме исключений) подробно отсылаются и удаленным клиентам.

Явно задавать возврат подробной информации можно в объекте HttpConfiguration:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;

Как было упомянуто выше, значение по умолчанию LocalOnly.

Обработка ошибок для некорректных моделей

Еще один распространенный способ использования обработки ошибок Web API – это немедленный возврат ошибки в случае некорректной модели. Для этого лучше всего реализовать следующий фильтр метода действия:

public class ValidationFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            actionContext.Response = 
                 actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,   
                 actionContext.ModelState);
         }
     }
}

Можно прописать этот фильтр для каждого метода а можно зарегистрировать его глобально сразу для всех методов:

config.Filters.Add(new ValidationFilterAttribute());

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

Никто еще не оставил здесь комментарий.


Offline

ATRT

 


#1
Оставлено
:

25 сентября 2018 г. 7:43:10(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

Добрый день.

Не удаётся выполнить подписание документа с подтверждением через rest-интерфейс.
Алгоритм следующий: получаю токен через /STS/oauth/token.
После этого отправляю запрос на /SignServer/rest/api/transactions со следующим содержанием:

Полностью запрос выглядит так:

Пробовал Action задавать числом, добавлять/убирать параметры подписи ит.п. В ответ возвращается {«Message»:»invalid_operation»}.

Также пробовал отправлять запрос {«Resource»:»http://dsslab/SignServer/SignService.svc/federation»} на /STS/confirmation. В ответ сразу приходит токен, который я пытаюсь использовать для подписания документа, но получаю 403 ошибку (что, правда, ожидаемо, т.к. при запросе на confirmation я не знаю id транзакции).

Без подтверждения документ подписывается нормально.
Собственно, вопрос: как с использованием rest подписать документ с подтверждением (и правильно ли я передаю в этом случае параметры подписи).
DSS находится на виртуальной машине, работает с тестовым УЦ.


Вверх


Offline

Mironov

 


#2
Оставлено
:

25 сентября 2018 г. 15:20:07(UTC)

Mironov

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 16.10.2013(UTC)
Сообщений: 21
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 4 раз в 4 постах

Добрый день!
Уточните, пожалуйста, номер установленной сборки КриптоПро DSS на виртуальной машине.


Вверх


Offline

ATRT

 


#3
Оставлено
:

26 сентября 2018 г. 7:04:45(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

2.0.3


Вверх


Offline

Mironov

 


#4
Оставлено
:

26 сентября 2018 г. 17:33:45(UTC)

Mironov

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 16.10.2013(UTC)
Сообщений: 21
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 4 раз в 4 постах

Это может оказаться полезным в Вашем вопросе:
https://dss.cryptopro.ru…s/mydss/mydss_usage.html


Вверх


Offline

ATRT

 


#5
Оставлено
:

27 сентября 2018 г. 7:37:56(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

Спасибо за ссылку. Подправил свой запрос — ошибка сменилась на

Цитата:

{«Message»:»An error has occurred.»}

.

В журнале событий подряд 4 ошибки:

В логах SignServerTracing нет записей с уровнем Error или Warning.


Вверх


Offline

Mironov

 


#6
Оставлено
:

27 сентября 2018 г. 16:09:27(UTC)

Mironov

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 16.10.2013(UTC)
Сообщений: 21
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 4 раз в 4 постах

Пришлите, пожалуйста, запрос, который у Вас получился.


Вверх


Offline

ATRT

 


#7
Оставлено
:

28 сентября 2018 г. 7:17:11(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

Пробовал и с параметрами из примера:

И со своими параметрами

Результат одинаков


Вверх


Offline

ATRT

 


#8
Оставлено
:

3 октября 2018 г. 7:08:06(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

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


Вверх


Offline

Mironov

 


#9
Оставлено
:

3 октября 2018 г. 17:44:28(UTC)

Mironov

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 16.10.2013(UTC)
Сообщений: 21
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 4 раз в 4 постах

Попробуем воспроизвести на ниш стендах.
Как вариант, проверьте есть ли запись о службе TSP в свойствах DSS (командлет в Powershell: Get-DssProperties), а так же проверьте доступность этой службы TSP с сервера DSS.


Вверх


Offline

ATRT

 


#10
Оставлено
:

4 октября 2018 г. 8:31:37(UTC)

ATRT

Статус: Новичок

Группы: Участники

Зарегистрирован: 25.09.2018(UTC)
Сообщений: 6

TSP доступен. Если отключить подтверждение подписи, то процесс подписания проходит нормально, timestamp ставится.


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

  • Ошибки семейного воспитания пути их предупреждения педагогика
  • Ошибки синего экрана windows 10 виды
  • Ошибки семейного воспитания памятка для родителей
  • Ошибки сеат ибица на дисплее
  • Ошибки сделают нас нелюбимыми