MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework Application Development Foundation, Second edition

MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework Application Development Foundation, Second edition
Tony Northrup
12 Nov 2008
Purchase online

Your 2-in-1 Self-Paced Training Kit. Fully updated and revised! Ace your preparation for the skills measured by MCTS Exam 70-536 and on the job. With this official Microsoft study guide, you ll work at your own pace through a series of lessons and reviews that fully cover each exam objective. Then reinforce and apply what you ve learned through real-world case scenarios and practice exercises.

Page 2 of 2
  1. Editorial Reviews
  2. Customer Reviews

Customer Reviews

Catherine A. Agacinski said
When I began reading this book in February 2009, its errata page [...] was on Revision 1.3. At this writing (6/30/2009) it is on Revision 1.16.

I worked through all of the C# coding examples. As I finished each chapter I sent comments to [...]. The typographical errors that I pointed out are now listed in the errata page. The logical errors, coding errors, and style errors are not. I think they need to be noted somewhere to help beginners like me who do not have mentors to ask. I have copied portions of my emails below. I have not gotten my MCPD yet, so I may be wrong. As you go through the book, see if you agree with me or not, and if not, let me know so I can learn from my mistakes. Thank you.

The Lesson Reviews and Practice Tests can be improved by allowing the student to select chapters of the book instead of test objectives. Selecting any one objective covers material from multiple chapters. When I finished the first chapter of the book, I could not select questions that only pertained to chapter 1. I had to answer questions from chapter 4, which I had not covered.
Also, the list of objectives only shows 2 at a time, requiring a lot of scrolling to see and select from all 7 objectives. It would be better to replace this list with the 16 chapters and show at least 8 chapters at a time to choose from.

Chapter 2 2/14/2009
The section "Using Isolated Storage," pages 85-88, doesn't even mention the methods GetMachineStoreForAssembly and GetMachineStoreForDomain. They shouldn't be potential answers to multiple-choice question 3 on page 92. The fact that they aren't described is a dead giveaway that they are wrong answers. On the other hand, if someone thought that they were worth using as possible answers, they should have been mentioned in the text to give them a little credibility.

Chapter 3 2/16/2009
In Chapter 3 Lesson 1, page 99, the output examples are missing spaces between the words in the results message.
On pages 112 - 114, the "How to Replace Substrings Using Regular Expressions" topic would be clearer if the differences between matching patterns and replacement patterns were stated before the code examples are given.
Also, I don't understand the purpose of the code example that replaces dates in mm/dd/yy format with dates in dd-mm-yy format. I would have set up a try/catch block. Inside the try I would convert the string to a DateTime type with Convert.ToDateTime method. Then I would return String.Format("{0}-{1}-{2}", datDate.Day, datDate.Month, datDate.Year); The catch would let me trap bad dates and inform the user, which the regular expression can't do.

Chapter 4 2/20/2009
On page 142 the ArrayList.BinarySearch sample code only works if you search for "Hello" or "this". For "a" it gives me -1. For "world" it gives me -7. For "is" it gives me -2. For "test" it gives me -2. It looks like BinarySearch has to be preceded by ArrayList.Sort, and then it gives correct indexes based on the sort, not the original order. To get the correct indexes on an unsorted ArrayList, I had to use ArrayList.IndexOf.

Chapter 5 2/28/2009
The topic "How to Control SOAP Serialization" on pages 180 - 181 needs a code example.
Page 189 mentions "object graphs" as something that can't be serialized with XML serialization. The book never defines an "object graph", never gives a reason why someone would want to serialize it, and never tells you how to serialize it with some method other than XML serialization.
Page 189 says that "XML serialization...cannot serialize private data". Page 191 says "If there are private or protected members, they are skipped during serialization." Should page 189 be revised to say that "XML serialization...cannot serialize private or protected data"?
On page 199 step 4 of the exercise in the C# code, the changes are not shown in bold.
The instructions displayed by the Console.WriteLine commands in the C# method DisplayUsageInformation are incorrect. The name of the executable is Serialize-People with a hyphen, not Serialize_People with an underscore.

Chapter 6 3/7/2009
On page 219, the first exam objective should say System.Drawing namespace instead of Sysem.Drawing.
On page xiv of the Table of Contents, topics "How to Specify the Location and Size of Controls" and "How to Specify the Color of Controls" should be indented like the other topics under Lesson 1.
On page 245 it states that the code uses Graphics.DrawPolygon, but it doesn't. I could not get it to run as a Console application (Visual Studio 2008) because I got errors that said "The type or namespace name 'Drawing' does not exist in the namespace 'System'. It did run as a Windows Form Application.
On page 253 the StringFormat member is "Trimming", not "Traimming".
On pages 259-260 step 5 of Exercise 2 the commands

// Define the font for the text
Font tf = new Font("Arial", 12);

// Create the foreground text brush
Brush tb = new SolidBrush(Color.Black);

// Define the vertical and horizontal alignment for the text
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Near;
sf.LineAlignment = StringAlignment.Center;

don't have to be inside the foreach loop because they remain the same for each line of the legend.

Chapter 7 3/15/2009
On page 275 the word "background" is misspelled as "backgroud".
On page 294 the C# code shows the inner for loop as "for (int i = 1; i <= 1000;="" interlocked.increment(ref="" i))".="" it="" should="" be="" "for="" (int="" i="1;" i=""><= 1000;="" i++)"="" instead,="" because="" the="" intent="" was="" to="" show="" first="" how="" increments="" can="" be="" lost="" when="" threads="" interrupt="" each="" other.="" on="" page="" 296="" the="" text="" says="" "to="" correct="" the="" problem,="" replace="" the="" number="" +="1" operation="" in="" mynum.addone="" with="" interlocked.increment(ref="" number),="" and="" then="" run="" the="" application="" again.="" so,="" the="" c#="" code="" has="" the="" interlocked.increment="" call="" in="" the="" wrong="" place="" anyway.="">
On page 298 the book says "If you run that code, you see the following output:

Waited for 1000 ms.
Waited for 2000 ms.
Waited for 3000 ms.
Main thread is complete."
On my dual core PC I sometimes get
Waited for 2000 ms.
Waited for 1000 ms.
Waited for 3000 ms.
Main thread is complete."
All that you can really guarantee is that "Main thread is complete." is the last line printed.

Chapter 8 3/19/2009
On pages 328-329 in the section "How to Provide Host Evidence for an Assembly" there is a code fragment that uses the SecurityZone enumeration and an Evidence object. The description should mention that the System.Security and System.Security.Policy namespaces are required.
On page 333 in step 4 of the Lab, the comment says "Create an Evidence object for the Internet zone" but the code and step 6 say that the application domain is created in the Intranet zone. The project in \\Chapter08\Lesson2\Exercise1\Partial\CS has an unresolved reference to ShowBootIni.
On page 343 the topic "How to Manage and Control a Service" is written assuming that the computer has Windows Vista. This is not always a valid assumption.
Page 345 states that the code sample requires that the System.ServiceProcess reference be added manually. It would be helpful to note that you "Add Reference" rather than "Add Service Reference" and that in the Add Reference dialog box you look for "System.ServiceProcess" rather than "Microsoft.ServiceProcess" or "ServiceProcess". I had to go to the Web to find out how to get the code fragment to compile.
On page 349 in Exercise 2, step 2 sets the installer properties. I am using Visual Studio 2008. StartType, Description, and DisplayName are properties of serviceInstaller1 but Account is a property of serverProcessInstaller1. That should be made clearer in the instructions.

Chapter 9 3/26/2009
On page 366 there is a code sample that demonstrates how to use ProviderName to create a database platform-specific DbConnection object using a ConnectionStringsSettings object. The text should mention that it requires a lot of additional references to compile.

// add namespaces
using System.Data.Common;
using System.Configuration;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;
using System.Data.OracleClient;

It should also mention that you have to do the same trick with System.Data.OracleClient that you do with the newer System.Configuration - almost the same 4 steps as on page 361. I did that on a hunch after the Intellisense wouldn't show me System.Data.OracleClient, and then I was able to build the project.

Pages 372-373 show a modified .config file for use with the code that demonstrates "Creating Custom Sections Using ConfigurationSection". I named my C# project ConfigApp so it would have the same namespace as the demonstration code. It doesn't work with the given .config file. It doesn't just blow up, either. It pops up a dialog box that says "ConfigApp has encountered a problem and needs to close. We are sorry for the inconvenience. ... Please tell Microsoft about this problem...." I had to change the first line of page 373 to

to get it to work. In other words, it is "ConfigApp", not "ConfigApp2".

On page 379 the text tells how to set the DEVPATH environment variable in Windows Vista. Assuming that the operating system is Windows Vista is a bad assumption. The text acknowledges on the previous page that a business may still be on .NET Framework 1.1 () and should also acknowledge that business operating systems are probably not Vista. I tried to find out how to set DEVPATH in Windows XP and found that information; I also found an MSDN blog that says "However, DEVPATH is only supported in development. It is not supported, and strongly discouraged in production, as it basically violates all the probing rules." ( I suggest that you add this warning.

On pages 386-387 the C# code shows the most basic implementation of a custom installer. It doesn't compile unless you add
using System.Configuration.Install;
using System.Collections;
using System.ComponentModel;

Chapter 10 3/29/2009
On pages 408-409 the topic "Configuring Debugging Using a .config File" should also have some program code that interacts with the .config file and some sample output. If the application code and the .config file conflict, which one wins?
On page 418 a PerformanceCounter is created
PerformanceCounter pc = new PerformanceCounter("IPv4", "Datagrams/sec");
When I run this code, I get an error "InvalidOperationException was unhandled. Category does not exist". I had to change the statement to
PerformanceCounter pc = new PerformanceCounter("IP", "Datagrams/sec"); My system is a dual-core running Windows XP Pro.
On page 429 the text notes that the code sample requires the System.Management namespace but does not note that adding "using System.Management;" to the code is insufficient. In Visual Studio 2008 you must also click the Project menu, click Add Reference, select System.Management on the .NET tab, and click OK.
On pages 433 and 435 there should be a note that __InstanceCreationEvent starts with two underscores, not just one.
On page 439 in step 7 of Exercise 1 in the Window_Loaded event handler,
the comment should be
// EventReceiver is a user-defined class. (no space between Event and Receiver.

Chapter 11 4/17/2009
In the Index on page 769 there are two entries that should be combined:
.NET Framework Configuration tool, 371, 380-82
.NET Framework Configuration Tool, 460-65
On page 471 under "To add a code group to the Machine policy" "Parent_ Code_Group" should be "Parent_Code_Group" (no space).
On page 472 under "To add a code group to the User policy" "Parent_ Code_Group" should be "Parent_Code_Group" (no space).
On page 473 Exercise 1 doesn't work. When I get to step 6 and run \\\c$\ListPermissions.exe it isn't missing any permissions.
On page 484 the last group of assembly declarations require adding a reference for the System.Drawing.Printing namespace, not the System.Drawing namespace.
On Page 494 the fourth line should begin with CodeAccessPermission instead of CodeaccessPermission.
On page 502 the code sample for "Best Practice for Handling Errors" requires
using System.Security;
using System.Security.Permissions;
using System.Diagnostics;
to compile properly.
On page 505 the code sample requires
using System.Security.Permissions;
using System.Security;
using System.IO;
to compile properly.
On page 507 the code sample requires
using System.Security.Permissions;
using System.Security;
to compile properly.
On pages 510-511 Exercise 3 doesn't work. I followed steps 1 through 10. Step 11 says PartiallyTrustedAssembly fails and reports a SecurityException, but it worked for me and did not report an exception. I was logged on as an administrator, as step 1 requests. I logged on as a limited user and tried step 10 again, and PartiallyTrustedAssembly failed but reported a System.UnauthorizedAccessException. I don't know why it doesn't work and there are no suggestions about how to fix it.
On page 745 the answers for questions 2, 3, and 4 of the Chapter 11 Lesson 3 Review are wrong. They don't match the choices offered. I think the answer given for the nonexistent question 5 is actually the answer to question 4.
I was very disappointed in this chapter and I don't think I learned what I was supposed to.

Chapter 12 5/1/2009
On page 527 the code that creates the WindowsIdentity object requires the System.Security.Principal namespace.
On page 528 at the bottom, the code requires the System.Security.Principal namespace.
On page 534 the code requires both the System.Security.Principal namespace and the System.Security.Permissions namespace.
On pages 538-539 the class requires the System.Security.Principal namespace.
On pages 540-541 the class requires the System.Security.Principal namespace.
On page 541 the GenericIdentity constructors require the System.Security.Principal namespace.
On page 553 the explanation of calculating effective permissions is unclear. The second last paragraph concludes that all members of the Managers group are denied access to the file. I don't think that is true. The explanation leads me to believe that Manager Mary specifically cannot open the file because she is a member of the Accounting group. Other Managers who are not members of Accounting probably have Full Control privileges.
The lab on pages 559-560 does not create a folder named C:\Guest. For me it created a folder named C:\Documents and Settings\Catherine Agacinski\My Documents\Guest.
On page 571 the code requires the System.Security.Cryptography namespace.
On page 576 the description of the KeySize property should probably be "Gets or sets the size in bits of the secret key used by the asymmetric algorithm" instead of "key used by the symmetric algorithm".
On page 578 the third line should say RSAParameters instead of RSAParamaters. The code fragment requires the System.Security.Cryptography namespace.
On page 579 the code requires the System.Security.Cryptography namespace.
On page 581 the code requires the System.Security.Cryptography namespace.
On page 584 the code requires System.Security.Cryptography and System.IO namespaces.
On page 585 the C# code requires the System.Security.Cryptography and System.IO namespaces. It should begin with the comment
"// Step1: Create a secret key".
On page 588 the code requires the System.Security.Cryptography and System.IO namespaces.

Chapter 13 5/8/2009
On page 605 it should be noted that Sapi.dll may be at some other location. Mine is at C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll. I am using Windows XP Pro.
On page 612 the code requires the System.Runtime.InteropServices namespace.
On page 623 the code sample showing how to marshal a string to the LPStr COM type should be
void MyMethod([MarshalAs(UnmanagedType.LPStr)] String s);
because it doesn't compile otherwise.

Chapter 14 5/9/2009
On pages 634, 635, 636, and 639 the code samples require the System.Reflection namespace.
On page 637 it should be stated that the AssemblyInfo file includes AssemblyCompany, AssemblyCopyright, and AssemblyVersion by default, but not those values. My AssemblyCompany is "" not "Contoso, Inc." and the copyright this year is 2009.
On page 641 the code requires the System.Reflection namespace and the System.Reflection.Emit namespace.

Chapter 15 5/14/2009
On pages 653, 654, 655, 663, 668 the code requires the System.Net.Mail namespace.
On page 655 near the bottom, the generic name is "application_octet-stream.dat" instead of "application_octect-stream.dat".
On page 657 the code requires the System.Net.Mail namespace and the System.Net.Mime namespace. The statement that creates LinkedResource pic1 should probably use "pic1.jpg" as its first argument instead of "pic.jpg".
On page 664 there is an irrelevant note about the SmtpClient.PickupDirectoryLocation property. It fails to explain the purpose of the property and the property is never referenced in the text.
On page 763 in the last sentence of the last point of the Lesson Summary, "You can call SmtpClien.SendAsyncCancel..." should be "You can call SmtpClient.SendAsyncCancel..."

Chapter 16 5/20/2009
The code on page 681 requires the System.Threading and System.Globalization namespaces to compile.
The code on pages 682, 684 requires the System.Globalization namespace.
On page 691 the code requires the System.Threading and System.Globalization namespaces to compile. When it runs it does not have a blank line between the outputs from the two cultures.
On page 693 the code requires the System.Threading and System.Globalization namespaces to compile.

Austin C# said
MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework Application Development Foundation, Second edition
I basically used this book as my only printed resourse for taking the Application Development Foundation (70-536) test. There are NO other alternative books that I know of.

This second edition of the book still has some errors in it. I attempted to read the first edition and found the number of erros appalling and distracting. I considered finding the errors on the second edition part of my training for the test. I also looked up topics that the book didn't cover on MSDN. The tests at the end of the chapters are in no way similar to the actual questions on the test but they still help in testing and consolidating your knowledge and undertanding of the topics.

As the time to take the test approached, I bought the pratice test from Transcender and found the questions it contained to be very similar to the questions on the actual test. I actually passed the test with a very high score. Getting a Transcender practice test actually gives you a better perspective of the types of questions you will encounter on the test and helps you fill in any gaps the book may have.

Good luck on the test.

Dimitri Shvorob said
In my experience, studying the book is sufficient to pass; I got six questions wrong, and in one case only felt (and confirmed) that the book was of no help. I am impressed by Northrup's ability to present this large amount of information, and willing to overlook the many typos and editing mishaps - my favorite are the mutually contradictory descriptions of StringDictionary on pp. 144-145, one exactly opposite the other - and the softball practice tests.

James Ramsey said
Most of the other reviews say this book is great because the first edition was so much worse. Personally, I don't think that is an excuse.

The practice test has many errors of every category: clearly incorrect answers that directly contradict the "explanation" are marked as the correct answer, letter-for-letter duplicates in the answer options, vague questions that could produce a different correct answer depending on interpretation, and plenty of questions that are not covered in the book (each question states which chapter and lesson covers it...I went back and read them, many of them simply aren't there).

Furthermore, the book does not adequately cover the topics for the test. It skims all of them, but does not give you sufficient depth.

This is a good book for under five bucks. If you want something serious that will prepare you for this (over-broad and over-emphasizing of trivia and valueless minutiae) test, look elsewhere.

V. Faller said
This book does cover much of the material on the exam but I feel like it focuses on certain material that just wasn't covered. I don't think I would have passed using this book and the provided practice test alone. My suggestion is use this book in addition to other forms of training.

You might also like...



Why not write for us? Or you could submit an event or a user group in your area. Alternatively just tell us what you think!

Our tools

We've got automatic conversion tools to convert C# to VB.NET, VB.NET to C#. Also you can compress javascript and compress css and generate sql connection strings.

“We better hurry up and start coding, there are going to be a lot of bugs to fix.”