Introduction |
|
1 | (4) |
|
Part I: Introduction to the Visual Studio .NET IDE |
|
|
5 | (30) |
|
The Visual Studio .NET IDE |
|
|
6 | (29) |
|
Window Management and Customization |
|
|
7 | (7) |
|
Customized Interfaces with Visual Studio .NET's ``Developer Profiles'' |
|
|
7 | (1) |
|
Configuring Keyboard Shortcuts |
|
|
8 | (1) |
|
|
9 | (1) |
|
Maximizing Your Viewable Area |
|
|
9 | (1) |
|
Using Visual Studio .NET 2003's Dockable Windows |
|
|
10 | (4) |
|
Understanding Visual Studio .NET 2003's Tool Windows |
|
|
14 | (4) |
|
|
18 | (12) |
|
Enhancing the Text Editor |
|
|
18 | (4) |
|
Finding Help Where You Need It |
|
|
22 | (4) |
|
|
26 | (3) |
|
|
29 | (1) |
|
|
30 | (1) |
|
|
30 | (2) |
|
|
31 | (1) |
|
|
32 | (1) |
|
|
32 | (3) |
|
Part II: Language Fundamentals |
|
|
35 | (278) |
|
|
36 | (16) |
|
Why Learn Yet Another Language? |
|
|
37 | (1) |
|
|
38 | (2) |
|
Understanding Value Types |
|
|
38 | (1) |
|
Understanding Reference Types |
|
|
39 | (1) |
|
Reference Versus Value Types |
|
|
40 | (1) |
|
What Is the Common Language Runtime? |
|
|
40 | (4) |
|
Multiple Languages, One Runtime |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
Rotor: Microsoft's Shared Source Common Language Infrastructure |
|
|
44 | (1) |
|
Take Out the Trash: Theory of Garbage Collection |
|
|
44 | (4) |
|
|
44 | (1) |
|
|
44 | (1) |
|
|
45 | (1) |
|
|
45 | (1) |
|
Nondeterministic Finalization |
|
|
45 | (1) |
|
Using IDisposable to Create Well-Behaved Objects |
|
|
46 | (2) |
|
Introduction to the Base Class Library |
|
|
48 | (1) |
|
The Canonical ``Hello World'' Example |
|
|
49 | (2) |
|
|
51 | (1) |
|
|
51 | (1) |
|
Expressions and Control Structures |
|
|
52 | (22) |
|
Expressions and Control Structures |
|
|
53 | (1) |
|
|
53 | (1) |
|
|
53 | (1) |
|
|
54 | (6) |
|
|
60 | (1) |
|
Program Flow Control: Control Structures |
|
|
60 | (8) |
|
The Program Execution Path |
|
|
60 | (1) |
|
|
60 | (1) |
|
|
61 | (1) |
|
The if/else Control Structure Combination |
|
|
61 | (1) |
|
|
62 | (2) |
|
Using the Ternary Operator |
|
|
64 | (1) |
|
|
65 | (3) |
|
|
68 | (5) |
|
|
68 | (1) |
|
|
69 | (1) |
|
|
69 | (1) |
|
|
70 | (2) |
|
|
72 | (1) |
|
|
73 | (1) |
|
|
73 | (1) |
|
Strings and Regular Expressions |
|
|
74 | (18) |
|
|
75 | (10) |
|
Understanding the Immutability of Strings |
|
|
75 | (1) |
|
Applying Formatting to Strings |
|
|
75 | (4) |
|
|
79 | (1) |
|
|
80 | (1) |
|
|
80 | (1) |
|
|
81 | (1) |
|
|
81 | (1) |
|
|
82 | (1) |
|
|
82 | (1) |
|
|
83 | (1) |
|
|
83 | (1) |
|
|
83 | (1) |
|
|
83 | (1) |
|
Replacing Strings and Characters |
|
|
84 | (1) |
|
|
84 | (1) |
|
Using Regular Expressions |
|
|
85 | (1) |
|
Understanding Expression Syntax |
|
|
85 | (1) |
|
|
85 | (6) |
|
Validating Data with Regular Expressions |
|
|
89 | (1) |
|
|
89 | (1) |
|
Replacing Matched Strings |
|
|
90 | (1) |
|
|
91 | (1) |
|
|
91 | (1) |
|
|
92 | (20) |
|
|
93 | (5) |
|
Understanding Single-Dimensional and Multidimensional Arrays |
|
|
93 | (2) |
|
|
95 | (1) |
|
Passing Arrays as Parameters |
|
|
96 | (2) |
|
|
98 | (1) |
|
Understanding the Basic Collection Interfaces |
|
|
98 | (1) |
|
Iterating Through Collections |
|
|
98 | (1) |
|
Collections Provided by the Base Class Libraries |
|
|
99 | (8) |
|
|
100 | (1) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
103 | (1) |
|
|
104 | (2) |
|
|
106 | (1) |
|
Creating Custom Collections |
|
|
107 | (2) |
|
Implementing the CollectionBase Class |
|
|
107 | (1) |
|
Creating a AddressList Collection |
|
|
107 | (2) |
|
|
109 | (1) |
|
|
110 | (2) |
|
|
112 | (16) |
|
|
112 | (6) |
|
|
113 | (1) |
|
Operations in Object-Oriented Design and Programming |
|
|
114 | (2) |
|
|
116 | (1) |
|
|
117 | (1) |
|
Objects State Maintenance |
|
|
118 | (1) |
|
Advanced Topics in Classes and Objects |
|
|
118 | (7) |
|
Inheriting from Base Classes |
|
|
119 | (3) |
|
Introduction to Polymorphism |
|
|
122 | (3) |
|
|
125 | (1) |
|
|
126 | (2) |
|
File and Stream I/O and Object Persistence |
|
|
128 | (26) |
|
|
128 | (14) |
|
Understanding File and Stream I/O |
|
|
129 | (3) |
|
Using Streams: FileStream, MemoryStream, StringReader, and StringWriter |
|
|
132 | (6) |
|
Using the FileSystemWatcher |
|
|
138 | (4) |
|
|
142 | (10) |
|
|
143 | (6) |
|
Extending Standard Serialization |
|
|
149 | (3) |
|
|
152 | (1) |
|
|
152 | (2) |
|
|
154 | (30) |
|
|
155 | (8) |
|
|
161 | (1) |
|
Working with XML Nodes, Elements, and Attributes |
|
|
162 | (1) |
|
|
163 | (1) |
|
Using the XmlReader Classes |
|
|
163 | (5) |
|
|
164 | (1) |
|
|
164 | (2) |
|
Using the XmlValidatingReader |
|
|
166 | (1) |
|
|
167 | (1) |
|
|
167 | (1) |
|
|
168 | (3) |
|
|
169 | (1) |
|
|
170 | (1) |
|
Introduction to the XPathDocument |
|
|
171 | (8) |
|
|
175 | (1) |
|
Transforming XML Documents |
|
|
175 | (4) |
|
|
179 | (4) |
|
Using Basic XML Serialization |
|
|
179 | (2) |
|
Customizing XML Serialization |
|
|
181 | (2) |
|
|
183 | (1) |
|
|
183 | (1) |
|
Multithreaded Programming |
|
|
184 | (26) |
|
|
185 | (7) |
|
Understanding the Key Thread Properties and Methods |
|
|
185 | (2) |
|
Explaining the ThreadStart Delegate |
|
|
187 | (1) |
|
|
188 | (1) |
|
|
188 | (1) |
|
|
188 | (3) |
|
|
191 | (1) |
|
Creating a Pause by ``Sleeping'' a Thread |
|
|
191 | (1) |
|
|
191 | (1) |
|
|
192 | (1) |
|
Understanding the Different Types of Synchronization |
|
|
193 | (1) |
|
Applying the lock Keyword |
|
|
193 | (13) |
|
|
194 | (2) |
|
|
196 | (2) |
|
|
198 | (5) |
|
Safeguarding Variables (Interlocked Increment/Decrement) |
|
|
203 | (1) |
|
Reading Without Waiting (ReaderWriterLock) |
|
|
203 | (3) |
|
Using the Thread Pool for Asynchronous Programming |
|
|
206 | (3) |
|
Explaining the WaitCallback Delegate |
|
|
206 | (1) |
|
|
207 | (1) |
|
|
208 | (1) |
|
|
209 | (1) |
|
|
210 | (18) |
|
|
210 | (16) |
|
|
215 | (3) |
|
|
218 | (1) |
|
|
219 | (2) |
|
|
221 | (5) |
|
|
226 | (1) |
|
|
226 | (2) |
|
Reflection and Code Attributes |
|
|
228 | (14) |
|
|
228 | (6) |
|
Introduction to Reflection |
|
|
229 | (1) |
|
|
229 | (1) |
|
Discovering Type Information at Runtime |
|
|
229 | (5) |
|
|
234 | (7) |
|
Introduction to Code Attributes |
|
|
234 | (1) |
|
|
235 | (1) |
|
Creating Custom Attributes |
|
|
236 | (2) |
|
Querying Custom Attributes |
|
|
238 | (3) |
|
|
241 | (1) |
|
|
241 | (1) |
|
Assemblies and AppDomains |
|
|
242 | (32) |
|
|
243 | (1) |
|
Introduction to Assemblies |
|
|
243 | (1) |
|
|
243 | (4) |
|
Introducing the Assembly Manifest |
|
|
244 | (2) |
|
|
246 | (1) |
|
Inside the Assembly---MSIL Code |
|
|
247 | (1) |
|
|
247 | (1) |
|
|
247 | (4) |
|
Embedding Content and Resources in Assemblies |
|
|
251 | (4) |
|
Localization and Satellite Assemblies |
|
|
255 | (4) |
|
|
256 | (3) |
|
|
259 | (5) |
|
Introduction to AppDomains |
|
|
259 | (1) |
|
Programming with AppDomains |
|
|
260 | (4) |
|
Putting It Together---A Real-World Example |
|
|
264 | (9) |
|
Building Application Plug-Ins |
|
|
264 | (9) |
|
|
273 | (1) |
|
COM and Windows Interoperability |
|
|
274 | (20) |
|
Using .NET Code to Interact with COM |
|
|
275 | (6) |
|
Introduction to COM Interop |
|
|
275 | (1) |
|
The Runtime Callable Wrapper |
|
|
275 | (1) |
|
|
276 | (2) |
|
Code Interoperability Example: .NET Code Invoking COM Code |
|
|
278 | (3) |
|
|
281 | (5) |
|
|
281 | (1) |
|
.NET Code Attributes for COM Interop Programming |
|
|
281 | (1) |
|
Marshalling Data from COM to .NET |
|
|
282 | (1) |
|
Interop Programming Example: COM Code Utilizing .NET Components |
|
|
283 | (2) |
|
|
285 | (1) |
|
Primary Interop Assemblies |
|
|
286 | (2) |
|
Overview of Primary Interop Assemblies |
|
|
286 | (1) |
|
|
286 | (1) |
|
Producing and Deploying PIAs |
|
|
287 | (1) |
|
Platform Invoke (P/Invoke) |
|
|
288 | (4) |
|
Introduction to Platform Invoke |
|
|
288 | (1) |
|
|
288 | (1) |
|
Platform Invoke---Data Marshalling |
|
|
289 | (1) |
|
Platform Invoke Sample---The Win32 API |
|
|
290 | (2) |
|
When to Use Platform Invoke |
|
|
292 | (1) |
|
|
292 | (1) |
|
|
292 | (2) |
|
High-Performance Programming |
|
|
294 | (19) |
|
Introduction to Garbage Collection |
|
|
295 | (5) |
|
Garbage Collection Internals---Generations |
|
|
295 | (1) |
|
Coding with the Garbage Collector in Mind |
|
|
296 | (1) |
|
Caveat: Nondeterministic Finalization Versus Deconstruction |
|
|
297 | (3) |
|
Memory and Class Management in the Common Language Runtime |
|
|
300 | (5) |
|
|
300 | (2) |
|
|
302 | (1) |
|
Using the StringBuilder Class |
|
|
303 | (2) |
|
High-Performance Code: Best Practices |
|
|
305 | (5) |
|
|
305 | (1) |
|
|
305 | (1) |
|
Value Versus Reference Types |
|
|
306 | (1) |
|
Tip: Using AddRange on Collections |
|
|
307 | (1) |
|
Jagged Versus Rectangular Arrays |
|
|
307 | (1) |
|
|
308 | (2) |
|
Utilizing Asynchronous I/O |
|
|
310 | (1) |
|
|
310 | (1) |
|
|
310 | (3) |
|
Part III: Windows Applications |
|
|
313 | (110) |
|
Introduction to Windows Forms |
|
|
314 | (16) |
|
|
314 | (4) |
|
Introducing the Main Method |
|
|
315 | (1) |
|
Understanding the Forms Designer |
|
|
316 | (2) |
|
|
318 | (11) |
|
Creating an Application Using the Windows Application Wizard |
|
|
319 | (2) |
|
|
321 | (1) |
|
Compiling and Running the Application |
|
|
322 | (2) |
|
Responding to a Button Click |
|
|
324 | (5) |
|
|
329 | (1) |
|
|
329 | (1) |
|
Windows Forms User Interface Controls |
|
|
330 | (20) |
|
Standard Windows Forms User Interface Controls |
|
|
330 | (17) |
|
Performing Actions with Controls |
|
|
330 | (4) |
|
Storing and Changing Values with Controls |
|
|
334 | (3) |
|
Maintaining Lists with Controls |
|
|
337 | (10) |
|
|
347 | (2) |
|
|
349 | (1) |
|
|
349 | (1) |
|
Creating Visually Compelling Windows Forms Applications |
|
|
350 | (22) |
|
|
351 | (8) |
|
|
351 | (1) |
|
WinForms Visual Inheritance in Action |
|
|
352 | (6) |
|
Visual Inheritance Best Practices |
|
|
358 | (1) |
|
Creating and Using Dynamic Context Menus |
|
|
359 | (4) |
|
Introduction to Contextual, Adaptive User Interfaces |
|
|
360 | (1) |
|
A Sample Dynamic Context Menu in Action |
|
|
360 | (3) |
|
Drawing Custom List Elements |
|
|
363 | (1) |
|
Using the DrawMode Property |
|
|
363 | (5) |
|
Creating a Custom ListBox |
|
|
363 | (2) |
|
Creating Custom Menu Items |
|
|
365 | (3) |
|
|
368 | (2) |
|
Introduction to Shaped Forms |
|
|
368 | (1) |
|
Creating a Sample Shaped Form |
|
|
368 | (2) |
|
|
370 | (1) |
|
|
370 | (2) |
|
|
372 | (18) |
|
|
373 | (5) |
|
Adding References in Visual Studio .NET |
|
|
373 | (4) |
|
|
377 | (1) |
|
|
378 | (5) |
|
Storing URLs in app.config |
|
|
379 | (1) |
|
Storing URLs in Isolated Storage |
|
|
379 | (3) |
|
Dynamic URLs via UDDI Consumption |
|
|
382 | (1) |
|
Consuming Web Services Asynchronously |
|
|
383 | (5) |
|
Multithreaded Service Consumption Sample |
|
|
384 | (1) |
|
Web Service Client Reliability |
|
|
385 | (1) |
|
Testing for Network Connection |
|
|
386 | (1) |
|
Handling Web Service Errors |
|
|
387 | (1) |
|
Supporting Offline Actions |
|
|
387 | (1) |
|
|
388 | (1) |
|
|
388 | (2) |
|
|
390 | (12) |
|
|
390 | (11) |
|
Understanding the Smart Client |
|
|
391 | (1) |
|
Deploying Smart Client Updates from a Centralized Server |
|
|
392 | (4) |
|
Make Use of Web Services for Smart Client Back-End Support |
|
|
396 | (4) |
|
Deciding Whether to Process on the Server Side or Client Side for Efficiency |
|
|
400 | (1) |
|
Make Use of Online and Offline Functionality |
|
|
400 | (1) |
|
|
401 | (1) |
|
|
401 | (1) |
|
Deploying Windows Applications |
|
|
402 | (21) |
|
Installing .NET Applications |
|
|
402 | (8) |
|
Understanding Assembly Deployment |
|
|
403 | (1) |
|
Placing Assemblies in the Global Assembly Cache |
|
|
404 | (5) |
|
|
409 | (1) |
|
|
410 | (5) |
|
|
410 | (2) |
|
Deploying Smart Client Applications |
|
|
412 | (3) |
|
MSI/Project Installations |
|
|
415 | (6) |
|
Creating an Installation Project |
|
|
415 | (6) |
|
|
421 | (1) |
|
|
421 | (2) |
|
Part IV: Web Applications |
|
|
423 | (112) |
|
Introduction to Web Forms and ASP.NET |
|
|
424 | (16) |
|
Understanding the Web Forms Designer |
|
|
424 | (2) |
|
Creating an ASP.NET ``Hello World'' Application |
|
|
426 | (7) |
|
|
433 | (5) |
|
|
438 | (1) |
|
|
438 | (2) |
|
|
440 | (16) |
|
|
440 | (15) |
|
|
444 | (11) |
|
|
455 | (1) |
|
|
455 | (1) |
|
State Management in ASP.NET |
|
|
456 | (28) |
|
Client-Side State Management |
|
|
456 | (23) |
|
|
456 | (7) |
|
|
463 | (4) |
|
|
467 | (4) |
|
Understanding Query Strings |
|
|
471 | (3) |
|
Passing Server Control Values Between Forms |
|
|
474 | (5) |
|
Server-Side State Management |
|
|
479 | (3) |
|
Explaining Application State |
|
|
480 | (1) |
|
Understanding Session State |
|
|
481 | (1) |
|
|
482 | (1) |
|
|
483 | (1) |
|
|
484 | (14) |
|
|
484 | (12) |
|
Introduction to ASP.NET Caching |
|
|
485 | (1) |
|
|
486 | (3) |
|
|
489 | (2) |
|
|
491 | (5) |
|
|
496 | (1) |
|
|
496 | (2) |
|
|
498 | (22) |
|
Creating ASP.NET Applications in a Web Farm |
|
|
499 | (7) |
|
|
499 | (2) |
|
Session State Maintenance in a Web Farm |
|
|
501 | (2) |
|
Application State in a Web Farm |
|
|
503 | (1) |
|
Web Farm Configuration and Deployment |
|
|
504 | (1) |
|
Web Farm Best Practices, Recommendations, and Caveats |
|
|
505 | (1) |
|
Localization and Globalization in ASP.NET |
|
|
506 | (7) |
|
Using Localized Resources |
|
|
506 | (1) |
|
Displaying Localized Content |
|
|
507 | (4) |
|
``Out of the Box'' Localization Functionality |
|
|
511 | (2) |
|
Creating Custom HttpModules |
|
|
513 | (3) |
|
Understanding the ASP.NET Application Events |
|
|
513 | (1) |
|
Creating a Custom HttpModule |
|
|
513 | (3) |
|
Creating Custom HttpHandlers |
|
|
516 | (2) |
|
Building a Synchronous HttpHandler |
|
|
516 | (2) |
|
|
518 | (1) |
|
|
519 | (1) |
|
Deploying ASP.NET Applications |
|
|
520 | (15) |
|
Manually Deploying an ASP.NET Application |
|
|
521 | (2) |
|
Deploying via ``Copy Project'' |
|
|
521 | (1) |
|
|
522 | (1) |
|
|
522 | (1) |
|
|
523 | (6) |
|
|
523 | (6) |
|
Deploying a Setup Project |
|
|
529 | (1) |
|
Advanced ASP.NET Deployment |
|
|
529 | (4) |
|
|
530 | (1) |
|
Firewalls, DMZs, Routers, and Security Constraints |
|
|
530 | (2) |
|
Hosted Environment Considerations |
|
|
532 | (1) |
|
|
533 | (1) |
|
|
533 | (2) |
|
|
535 | (126) |
|
Using .NET Data Providers |
|
|
536 | (18) |
|
|
537 | (7) |
|
Introduction to the SQL Server Data Provider |
|
|
537 | (1) |
|
Using the SqlConnection Class |
|
|
537 | (2) |
|
Using Database Connection Strings with a SqlConnection |
|
|
539 | (1) |
|
|
540 | (2) |
|
|
542 | (1) |
|
|
542 | (2) |
|
Working with the OLEDB Data Provider |
|
|
544 | (3) |
|
Overview of the OLEDB Data Provider |
|
|
545 | (1) |
|
Using the OleDbConnection |
|
|
545 | (1) |
|
|
545 | (1) |
|
Using the OleDbDataReader |
|
|
546 | (1) |
|
Using the OleDbDataAdapter |
|
|
546 | (1) |
|
Additional Data Providers |
|
|
547 | (1) |
|
The Oracle.NET Data Provider (ODP.NET) |
|
|
547 | (1) |
|
The Microsoft .NET Data Provider for Oracle |
|
|
547 | (1) |
|
The .NET ODBC Data Provider |
|
|
548 | (1) |
|
The mySQL.NET Data Provider |
|
|
548 | (1) |
|
DataSet and DataAdapter Binding |
|
|
548 | (4) |
|
|
548 | (1) |
|
Associating a DataSet with a DataAdapter |
|
|
549 | (1) |
|
Sample: Hooking Up a DataSet to a Live Data Source |
|
|
549 | (3) |
|
|
552 | (1) |
|
|
552 | (2) |
|
Creating a Custom ADO.NET Data Provider |
|
|
554 | (34) |
|
|
555 | (3) |
|
When to Create a Data Provider |
|
|
555 | (1) |
|
Steps for Implementing a Custom Data Provider |
|
|
556 | (1) |
|
Sample Data Provider Scenario |
|
|
556 | (1) |
|
Overview of the Remote Data Provider |
|
|
557 | (1) |
|
Implementing IDataParameter and IDataParameterCollection |
|
|
558 | (7) |
|
The IDataParameter Interface |
|
|
558 | (1) |
|
The IDataParameterCollection Interface |
|
|
559 | (1) |
|
|
559 | (4) |
|
The RDPParameterCollection Class |
|
|
563 | (2) |
|
Implementing a Custom Connection |
|
|
565 | (4) |
|
The IDbConnection Interface |
|
|
566 | (1) |
|
|
566 | (3) |
|
Implementing a Custom Command |
|
|
569 | (6) |
|
|
569 | (1) |
|
|
570 | (5) |
|
Implementing a Custom DataReader |
|
|
575 | (7) |
|
The IDataReader Interface |
|
|
575 | (1) |
|
|
576 | (6) |
|
Implementing a Custom DataAdapter |
|
|
582 | (5) |
|
The IDbDataAdapter Interface |
|
|
582 | (1) |
|
|
582 | (5) |
|
|
587 | (1) |
|
|
588 | (24) |
|
|
589 | (10) |
|
|
589 | (2) |
|
Primitive Data Types in XSD |
|
|
591 | (1) |
|
|
591 | (1) |
|
|
592 | (1) |
|
|
593 | (1) |
|
|
593 | (1) |
|
|
594 | (1) |
|
Programming XML Schemas---The XmlSchema Class |
|
|
595 | (4) |
|
Structuring DataSets with Schema |
|
|
599 | (4) |
|
Defining Tables and Columns Using XML Schema |
|
|
599 | (1) |
|
Defining DataSet Keys and Constraints with XML Schema |
|
|
600 | (3) |
|
|
603 | (8) |
|
Creating Typed DataSets in Visual Studio .NET |
|
|
606 | (1) |
|
Building Typed DataSets Using XSD.EXE |
|
|
607 | (1) |
|
|
607 | (2) |
|
Annotating Typed DataSets |
|
|
609 | (2) |
|
|
611 | (1) |
|
|
611 | (1) |
|
Windows Forms Data Binding |
|
|
612 | (22) |
|
|
613 | (3) |
|
Introduction to Windows Forms Data Binding |
|
|
613 | (1) |
|
|
613 | (3) |
|
|
616 | (1) |
|
One-Way and Two-Way Data Binding |
|
|
616 | (1) |
|
|
616 | (5) |
|
|
617 | (1) |
|
The CurrencyManager Class |
|
|
617 | (3) |
|
The PropertyManager Class |
|
|
620 | (1) |
|
|
621 | (4) |
|
|
621 | (1) |
|
|
622 | (1) |
|
|
622 | (3) |
|
|
625 | (7) |
|
|
625 | (3) |
|
|
628 | (4) |
|
|
632 | (2) |
|
|
634 | (27) |
|
|
635 | (4) |
|
Introduction to Web Forms Data Binding |
|
|
635 | (1) |
|
|
635 | (1) |
|
|
636 | (2) |
|
|
638 | (1) |
|
|
638 | (1) |
|
|
639 | (2) |
|
|
639 | (1) |
|
|
639 | (1) |
|
|
640 | (1) |
|
|
641 | (6) |
|
|
641 | (1) |
|
|
641 | (4) |
|
|
645 | (2) |
|
|
647 | (1) |
|
|
647 | (10) |
|
|
648 | (4) |
|
Cascading Header and Detail |
|
|
652 | (5) |
|
|
657 | (1) |
|
|
658 | (3) |
|
|
661 | (32) |
|
Introduction to Web Services |
|
|
662 | (16) |
|
Introduction to Web Services |
|
|
663 | (2) |
|
|
663 | (1) |
|
|
663 | (2) |
|
|
665 | (1) |
|
|
665 | (9) |
|
|
665 | (4) |
|
|
669 | (4) |
|
Using Transactions with a Web Service |
|
|
673 | (1) |
|
Maintaining State with a Web Service |
|
|
673 | (1) |
|
Contract-First Programming with Web Services |
|
|
674 | (1) |
|
Review of Web Service Consumption |
|
|
674 | (2) |
|
Creating a Client Proxy for a Web Service |
|
|
674 | (1) |
|
|
674 | (1) |
|
Making Asynchronous Calls |
|
|
675 | (1) |
|
|
676 | (1) |
|
|
676 | (2) |
|
|
678 | (15) |
|
|
679 | (1) |
|
|
679 | (1) |
|
|
679 | (1) |
|
|
679 | (8) |
|
|
680 | (1) |
|
SoapSender and SoapReceiver |
|
|
680 | (3) |
|
|
683 | (3) |
|
|
686 | (1) |
|
|
687 | (3) |
|
Introduction to WSE Security |
|
|
687 | (1) |
|
|
688 | (1) |
|
|
689 | (1) |
|
|
690 | (1) |
|
Messaging with Attachments Using WSE 2.0 |
|
|
690 | (1) |
|
|
690 | (1) |
|
Transferring Files Via WSE |
|
|
691 | (1) |
|
|
691 | (1) |
|
|
691 | (2) |
|
Part VII: Secure Applications |
|
|
693 | (80) |
|
|
694 | (16) |
|
|
695 | (3) |
|
Using Code Access Security Permissions |
|
|
696 | (1) |
|
|
696 | (1) |
|
|
697 | (1) |
|
Role-Based Security Permissions |
|
|
698 | (1) |
|
|
698 | (6) |
|
|
698 | (1) |
|
Policy Administration Tools |
|
|
699 | (1) |
|
Increasing Assembly Trust Levels |
|
|
700 | (1) |
|
|
701 | (1) |
|
|
701 | (2) |
|
Creating a Deployment Package |
|
|
703 | (1) |
|
|
704 | (4) |
|
Using Imperative Security Syntax |
|
|
704 | (1) |
|
Using Declarative Security Syntax |
|
|
705 | (1) |
|
Blocking Unwanted Clients |
|
|
706 | (2) |
|
|
708 | (1) |
|
|
709 | (1) |
|
|
710 | (24) |
|
Secret Key (Symmetric) Encryption |
|
|
711 | (5) |
|
|
711 | (1) |
|
|
712 | (1) |
|
|
713 | (1) |
|
TripleDESCryptoServiceProvider |
|
|
713 | (3) |
|
Using Hashes to Protect Data |
|
|
716 | (4) |
|
|
716 | (2) |
|
|
718 | (1) |
|
|
719 | (1) |
|
Public Key Encryption and Signatures |
|
|
720 | (3) |
|
|
721 | (2) |
|
|
723 | (1) |
|
Windows Data Protection API |
|
|
723 | (10) |
|
|
724 | (2) |
|
|
726 | (6) |
|
Protecting Data in .NET with DPAPI |
|
|
732 | (1) |
|
|
733 | (1) |
|
Securing ASP.NET Web Applications |
|
|
734 | (20) |
|
|
734 | (14) |
|
|
735 | (5) |
|
Authorizing Users with Roles |
|
|
740 | (1) |
|
Implementing IIdentity and IPrincipal |
|
|
740 | (8) |
|
Data Security in ASP.NET Applications |
|
|
748 | (4) |
|
Protecting Connection Strings and Web.config Data |
|
|
748 | (1) |
|
Protecting User Passwords |
|
|
748 | (3) |
|
|
751 | (1) |
|
Data Security with ViewState Encryption |
|
|
751 | (1) |
|
|
752 | (1) |
|
|
752 | (2) |
|
Licensing and Intellectual Property |
|
|
754 | (19) |
|
|
755 | (2) |
|
|
755 | (1) |
|
When to License and Protect |
|
|
755 | (1) |
|
Types of Licensing and Verification |
|
|
756 | (1) |
|
Implementing Custom Licensing |
|
|
757 | (11) |
|
Introduction to the License Provider and License Manager |
|
|
757 | (2) |
|
|
759 | (1) |
|
Creating a License Provider |
|
|
760 | (4) |
|
Building Licensed Controls |
|
|
764 | (4) |
|
Licensed Web Controls Versus Windows Forms Controls |
|
|
768 | (1) |
|
Licensing Implementation Strategies |
|
|
768 | (1) |
|
Deciding on a Licensing Deployment Method |
|
|
768 | (1) |
|
Deciding on a Licensing Verification Method |
|
|
768 | (1) |
|
Deciding on a License Purchase Method |
|
|
768 | (1) |
|
Deciding on a Licensing Method |
|
|
769 | (1) |
|
Protecting Your Intellectual Property |
|
|
769 | (2) |
|
Protecting Intellectual Property by Hiding Your Licensing Algorithm |
|
|
769 | (1) |
|
Protecting Intellectual Property Through Obfuscation |
|
|
770 | (1) |
|
Protecting Intellectual Property with Alternative Back-Ends |
|
|
770 | (1) |
|
|
771 | (1) |
|
|
771 | (2) |
|
Part VIII: Enterprise and Connected Applications |
|
|
773 | (76) |
|
|
774 | (18) |
|
|
774 | (16) |
|
Understanding the Interface |
|
|
774 | (4) |
|
Declaring the Interface Implicitly |
|
|
778 | (6) |
|
Declaring the Interface Explicitly |
|
|
784 | (2) |
|
|
786 | (3) |
|
|
789 | (1) |
|
|
790 | (1) |
|
|
790 | (2) |
|
|
792 | (16) |
|
|
792 | (14) |
|
|
792 | (1) |
|
Explaining Application Domains |
|
|
793 | (2) |
|
Understanding the Context |
|
|
795 | (1) |
|
|
796 | (1) |
|
Life and Death of the Remote Object |
|
|
797 | (6) |
|
Building the Remoting Server Application |
|
|
803 | (2) |
|
|
805 | (1) |
|
|
806 | (1) |
|
|
807 | (1) |
|
|
807 | (1) |
|
|
808 | (20) |
|
|
809 | (4) |
|
|
809 | (1) |
|
|
810 | (1) |
|
|
810 | (1) |
|
|
811 | (1) |
|
|
811 | (1) |
|
|
812 | (1) |
|
|
812 | (1) |
|
|
813 | (7) |
|
|
813 | (2) |
|
|
815 | (2) |
|
|
817 | (1) |
|
|
817 | (1) |
|
|
818 | (2) |
|
|
820 | (3) |
|
Object and Security Contexts |
|
|
820 | (1) |
|
|
821 | (2) |
|
|
823 | (4) |
|
|
823 | (3) |
|
|
826 | (1) |
|
|
827 | (1) |
|
|
827 | (1) |
|
|
828 | (21) |
|
|
828 | (3) |
|
Introducing the Enterprise Template |
|
|
829 | (1) |
|
Static and Dynamic Content |
|
|
830 | (1) |
|
|
831 | (1) |
|
|
831 | (1) |
|
|
831 | (1) |
|
|
831 | (3) |
|
|
832 | (2) |
|
|
834 | (12) |
|
Setting Up the Prerequisites |
|
|
834 | (1) |
|
|
835 | (1) |
|
Creating the Template Structure |
|
|
836 | (3) |
|
Assigning a Policy to the Template |
|
|
839 | (1) |
|
|
840 | (4) |
|
Making the Template Available to Users |
|
|
844 | (1) |
|
|
845 | (1) |
|
|
846 | (1) |
|
|
847 | (2) |
|
Part IX: Debugging and Testing |
|
|
849 | (69) |
|
Debugging Your Applications |
|
|
850 | (22) |
|
The Visual Studio .NET Debugging Environment |
|
|
850 | (11) |
|
Setting Up the Application for Debugging |
|
|
850 | (2) |
|
Understanding Syntax and Error Messages |
|
|
852 | (2) |
|
Understanding the Debugging Tool Windows |
|
|
854 | (4) |
|
Navigating the Application |
|
|
858 | (1) |
|
Setting and Using Breakpoints |
|
|
859 | (2) |
|
Debugging with Visual Studio .NET |
|
|
861 | (11) |
|
|
861 | (11) |
|
Monitoring Your Applications |
|
|
872 | (18) |
|
Debugging and Tracing Statements |
|
|
872 | (16) |
|
|
876 | (6) |
|
|
882 | (3) |
|
|
885 | (3) |
|
|
888 | (2) |
|
Instrumenting Your Application |
|
|
890 | (18) |
|
Instrumenting Applications |
|
|
890 | (12) |
|
Introduction to Instrumenting an Application |
|
|
891 | (1) |
|
Methods of Instrumentation |
|
|
892 | (1) |
|
|
892 | (3) |
|
Examining the Debug and Trace Classes |
|
|
895 | (2) |
|
Windows Management Instrumentation |
|
|
897 | (5) |
|
Enterprise Instrumentation Framework |
|
|
902 | (5) |
|
|
902 | (1) |
|
Enterprise Instrumentation Framework Requirements |
|
|
903 | (1) |
|
|
903 | (3) |
|
|
906 | (1) |
|
|
906 | (1) |
|
|
907 | (1) |
|
|
907 | (1) |
|
|
908 | (10) |
|
|
908 | (8) |
|
|
909 | (3) |
|
|
912 | (1) |
|
|
913 | (1) |
|
List Management with Iterators |
|
|
913 | (1) |
|
|
914 | (1) |
|
|
915 | (1) |
|
|
916 | (1) |
|
|
916 | (2) |
Index |
|
918 | |