Как отправлять отчеты об ошибках из диалога ошибок .net? - PullRequest
6 голосов
/ 21 декабря 2010

В 2008 году Джефф написал сообщение о , ответственном за крах .В этом духе я пытаюсь добавить кнопку «отправить отчет об ошибке» в диалоговое окно с сообщением об ошибке.Идея состоит в том, что пользователь может легко отправить полный отчет об ошибке, который уже включает информацию о версии, информацию об ОС, трассировку стека ... Эта информация должна быть помещена в текст сообщения или в файлы вложений.

К сожалению, отправкатакое письмо из приложения .NET выглядит нетривиальным:

  • System.Net.Mail - это не то, что я ищу: я не уверен, чтоподключение к SMTP-серверу может быть установлено во всех средах, и я не хочу возлагать бремя настройки локального имени хоста SMTP и порта на моих пользователей.Вместо этого я просто хочу запустить существующее программное обеспечение электронной почты в системе с предварительно составленным сообщением.
  • Использование ОС для открытия URL-адреса "mailto:" работает, но существуют раздражающие ограничения дляколичество данных, которые могут быть переданы таким образом.Кроме того, похоже, что вложения не поддерживаются спецификацией mailto .
  • mapi.dll , вероятно, будет делать то, что я хочу, как показано в этом codeprojectстатья , но я читал в другом месте, что mapi.dll принципиально несовместим с .NET , вызывая случайные сбои.

Кто-нибудь там нашел безопасное и надежное решение, чтобы сделатьэто?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

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

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

2 голосов
/ 21 декабря 2010

Быстрый способ - настроить сервер на получение информации через PHP, например. , Создайте ErrorReport.php и попытайтесь вызывать его для каждой информации, которую вы упаковали в пакет base64.

Для этого «только» необходим доступ в Интернет через порт 80, который, скорее всего, доступен. Оттуда вы можете обработать информацию и передать ее в базу данных, например. .

0 голосов
/ 21 декабря 2010

Вы можете - при использовании вашего собственного совместимого сервера - просто создать структуру сокетов типа "telnet" для отправки данных непосредственно на ваш сервер.

Примерно так: http://www.csharphelp.com/2007/07/sending-email-with-c-using-smtp/

...