Предотвращение недопустимых запросов

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

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

// C#
private void PublishReport()
{
   int index;
   string reservedChar;
   string message;

   // Check the text value of the name text box for "/",
   // a reserved character
   index = nameTextBox.Text.IndexOf(@"/");

   if ( index != -1) // The text contains the character
   {
      reservedChar = nameTextBox.Text.Substring(index, 1);
      // Build a user-friendly error message
      message = "The name of the report cannot contain the reserved character " +
         "\"" + reservedChar + "\". " +
         "Please enter a valid name for the report. " +
         "For more information about reserved characters, " +
         "see the help documentation";

      MessageBox.Show(message, "Invalid Input Error");
   }
   else // Publish the report
   {
      Byte[] definition = null;
      Warning[] warnings = {};
      string name = nameTextBox.Text;

      FileStream stream = File.OpenRead("MyReport.rdl");
      definition = new Byte[stream.Length];
      stream.Read(definition, 0, (int) stream.Length);
      stream.Close();
      // Create report with user-defined name
      rs.CreateCatalogItem("Report", name, "/Samples", false, definition, null, out warnings);
      MessageBox.Show("Report: {0} created successfully", name);
   }
}

Дополнительные сведения о типах ошибок, которые могут быть устранены до отправки запросов на сервер отчетов, см. в разделе Таблица ошибок SoapException. Дополнительную информацию об усовершенствовании предыдущего примера с помощью блоков try/catch см. в разделе Использование блоков Try-Catch.