- Introduction to Features
- Attaching to Processes
- Setting It All Up
- Inline Debugging of ASP.NET Pages
- Inline Debugging of Components
- Remote Debugging
- Summary
Inline Debugging of Components
If you tried debugging Visual Basic components within an ASP page in the previous version of Visual Studio, you will remember that it can be a pain to deal with. You need the Visual Interdev IDE open for debugging the ASP page, and you need the separate Visual Basic IDE open to debug the components at the same time.
The new Visual Studio .NET IDE makes this process remarkably simpler. You can add the component to your ASP.NET project, and debugging of that component can be done within the same IDE in sequence with your ASP.NET code. Let's look at how this is done. To do this, you will add a component to the previous project that actually sends out the email to the address provided.
Adding the Component
You will now add the component to the ASP.NET application. Just right-click your mouse on the project name (Chap5VB or Chap5CS, if you've named them what we called them) and choose Add Component under the Add submenu. Here, choose either a Visual Basic .NET component class or a C# component class, depending on which type of project you are currently doing. Name the component Emailer, for lack of a better name. Figure 7.11 shows the menu option to choose after right-clicking the project name.
Figure 7.11 Adding a new component to the project.
Now that you have added the component, it needs some code. Listing 7.4 is the C# version of the emailer, and Listing 7.5 is the Visual Basic .NET version. Reference whichever one is applicable for your project.
Listing 7.4 Code for Emailer Component (C#)
using System.Web.Mail; namespace Chap7CS { public class Emailer : System.ComponentModel.Component { private System.ComponentModel.Container components = null; public Emailer(System.ComponentModel.IContainer container) { container.Add(this); InitializeComponent(); } public Emailer() { InitializeComponent(); } private void InitializeComponent() { components = new System.ComponentModel.Container(); } public void SendFormEmail(string toAddr) { MailMessage mm = new MailMessage(); mm.To = toAddr; mm.From = "admin@domain.com"; mm.Body = "This is a test message. Exciting, isn't it?"; mm.Subject = "Chapter 7 Test Message"; SmtpMail.SmtpServer = "smtp.domain.com"; SmtpMail.Send(mm); } } }
Listing 7.5 Code for Emailer Component (Visual Basic .NET)
Imports System.Web.Mail Public Class Emailer Inherits System.ComponentModel.Component Public Sub New(ByVal Container As System.ComponentModel.IContainer) MyClass.New() Container.Add(Me) End Sub Public Sub New() MyBase.New() InitializeComponent() End Sub Private components As System.ComponentModel.Container <System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent() components = New System.ComponentModel.Container() End Sub Public Sub SendFormEmail(ByVal toAddr As String) Dim mm As MailMessage = New MailMessage() mm.To = toAddr mm.From = "admin@domain.com" mm.Body = "This is a test message. Exciting, isn't it?" mm.Subject = "Chapter 7 Test Message" SmtpMail.SmtpServer = "smtp.domain.com" SmtpMail.Send(mm) End Sub End Class
The code here is pretty simple. Each version contains a function called SendFormEmail that takes the email address to send to as a parameter. Then you use the MailMessage and SmtpMail objects from the System.Web.Mail assembly to form the email message and send it out using a valid SMTP server. To get this to work in your environment, be sure to replace the SmtpMail.SmtpServer value with the SMTP server of your local network.
You will need to modify your btnSubmit_ServerClick function to create an instance of this component and call the SendFormEmail method to make it happen. Listing 7.6 gives the code for the modified btnSubmit_ServerClick in C#, and Listing 7.7 gives the same code in Visual Basic .NET.
Listing 7.6 Modified Code for btnSubmit_ServerClick (C#)
private void btnSubmit_ServerClick(object sender, System.EventArgs e) { Emailer em = new Emailer(); Debug.WriteLine("User entered: " + txtEmail.Value); if(ValidateEmail(txtEmail.Value) == -1) Response.Write("The supplied email address is not valid."); else { em.SendFormEmail(txtEmail.Value); Response.Write("The email was sent successfully."); } }
Listing 7.7 Modified Code for btnSubmit_ServerClick (Visual Basic .NET)
Private Sub btnSubmit_ServerClick(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btnSubmit.ServerClick Dim em As Emailer = New Emailer() If txtEmail.Value.IndexOf("@") = -1 Or _ txtEmail.Value.IndexOf(".") = -1 Then Response.Write("The supplied email address is not valid.") Else em.SendFormEmail(txtEmail.Value) Response.Write("The email was sent successfully.") End If End Sub
Debugging the Component
Now we get to the cool part. You can debug this component while you debug the ASP.NET page and its respective code-behind file. To prove this, set a breakpoint on the btnSubmit_ServerClick in the code-behind file and then start the program.
When Internet Explorer appears, enter a valid email address in the appropriate box, and click the Submit button. Immediately, the breakpoint on the btnSubmit_ServerClick function should fire and the program is paused on that line. Now step to the point where the current function is about to call the Emailer.SendFormEmail function. At this position, do a Step Into. You will see that the source code to the Emailer component appears with the code pointer at the top of the SendFormEmail function.
From here, you can use all the techniques mentioned earlier to inspect variables, set trace statements, modify variable values, and so on. It couldn't be easier! Say goodbye to multiple programs being open simultaneously and other configuration issues that make your life difficult.