Freigeben über


Verwenden von Try- und Catch-Blöcken

Nachdem Sie ungültige Anforderungen auf den Berichtsserver beschränkt haben, indem Sie Ihrem Code bedingte Anweisungen hinzufügen, sollten Sie eine angemessene Ausnahmebehandlung mithilfe von Try/Catch-Blöcken bereitstellen. Diese Technik bietet eine weitere Schutzebene vor Anforderungen, die ungültig sind. Angenommen, eine Anforderung an den Berichtsserver wird in einen Try-Block eingeschlossen, und diese Anforderung bewirkt, dass der Berichtsserver eine Ausnahme auslöst. Die Ausnahme wird im Catch-Block abgefangen, wodurch verhindert wird, dass Ihre Anwendung unerwartet beendet wird. Sobald die Ausnahme abgefangen wurde, können Sie die Ausnahme verwenden, um den Benutzer anzuweisen, etwas anders zu tun. Oder Sie können dem Benutzer einfach mitteilen, dass ein Fehler aufgetreten ist. Sie können dann einen finally-Block verwenden, um einen Cleanup vorhandener Ressourcen durchzuführen. Idealerweise sollten Sie einen Plan für die allgemeine Ausnahmebehandlung generieren, um eine unnötige Verdoppelung von try/catch-Blöcken zu vermeiden.

Im folgenden Beispiel werden try/catch-Blöcke verwendet, um die Zuverlässigkeit des Ausnahmebehandlungscodes zu verbessern.

// 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, " +  
         "consult the online documentation";  
  
      MessageBox.Show(message, "Invalid Input Error");  
   }  
   else // Publish the report  
   {  
      Byte[] definition = null;  
      Warning[] warnings = {};  
      string name = nameTextBox.Text;  
  
      try  
      {  
         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);  
      }  
  
      // Catch expected exceptions beginning with the most specific,  
      // moving to the least specific  
      catch(IOException ex)  
      {  
         MessageBox.Show(ex.Message, "File IO Exception");  
      }  
  
      catch (SoapException ex)  
      {  
         // The exception is a SOAP exception, so use  
         // the Detail property's Message element.  
         MessageBox.Show(ex.Detail["Message"].InnerXml, "SOAP Exception");   
      }  
  
      catch (Exception ex)  
      {  
         MessageBox.Show(ex.Message, "General Exception");  
      }  
   }  
}  

Einführung in die Ausnahmeverwaltung in Reporting Services
Reporting Services SoapException-Klasse