Предотвращение недопустимых запросов
Возникновение некоторых типов исключений можно предотвратить, проведя анализ прикладного информационного потока и гарантировав допустимость запросов, направляемых серверу отчетов. Так, в приложениях, позволяющих пользователям добавлять или обновлять имя отчета, источник данных или другие элементы сервера отчетов, следует проверять текст, который могут вводить пользователи. Перед тем, как направить запрос на сервер отчетов, нужно непременно проверить его на наличие зарезервированных символов. Чтобы известить пользователя о том, что он не выполнил условий, которые обеспечивают отправку запросов на сервер отчетов, используйте в коде условные инструкции 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 = null; 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 warnings = rs.CreateReport(name, "/Samples", false, definition, null); MessageBox.Show("Report: {0} created successfully", name); }}
Сведения о типах ошибок, которые могут быть исправлены до отправки запросов на сервер отчетов, см. в разделе Таблица ошибок SoapException. Дополнительную информацию об усовершенствовании предыдущего примера с помощью блоков TRY и CATCH см. в разделе Использование блоков Try-Catch.
См. также