Foundation ASP.NET for Flash Ryan Moore Foundation ASP.NET for Flash Copyright © 2006 by Ryan Moore All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN (pbk): 1-59059-517-3 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit www.springeronline.com. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is freely available to readers at www.friendsofed.comin the Downloads section. Credits Lead Editors Assistant Production Director Chris Mills and Matthew Moodie Kari Brooks-Copony Technical Reviewer Production Editor Joshua Bloom Ellie Fountain Editorial Board Compositor and Artist Steve Anglin, Dan Appleman, Katy Freer Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore, Proofreader Jonathan Hassell, Chris Mills, April Eddy Dominic Shakeshaft, Jim Sumser Indexer Project Manager Broccoli Information Management Beth Christmas Cover Image Designer Copy Edit Manager Corné van Dooren Nicole LeClerc Interior and Cover Designer Copy Editor Kurt Krames Liz Welch Manufacturing Director Tom Debolski To my Mom, Dad, and Melissa, and Celeste. To Lindsay. CONTENTS About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . xii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . xiii About the Cover Image Designer . . . . . . . . . . . . . . . . . . xiv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi Chapter 1: Priming the Pump . . . . . . . . . . . . . . . . . . . . . 1 Static web pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Dynamically generated HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Flash/ASP.NET communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Methods of communicating between Flash and ASP.NET . . . . . . . . . . . . . . . . 9 FlashVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 LoadVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 XML object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Web services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Flash Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Three-tier architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Similarities between C# and ActionScript 2.0 . . . . . . . . . . . . . . . . . . . . . . . . 15 The .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 The common language runtime (CLR) . . . . . . . . . . . . . . . . . . . . . . . . . . 17 The Framework Class Library (FCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Installing the .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Setting up Internet Information Services (IIS) . . . . . . . . . . . . . . . . . . . . . . . . 20 Installing IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Testing your IIS/ASP.NET installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Installing SQL 2005 Express Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 v CONTENTS Visual Studio .NET 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Visual Studio .NET 2005 editions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Installing Visual Studio .NET 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Exploring the Visual Studio interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 #Develop: A free alternative to Visual Studio .NET . . . . . . . . . . . . . . . . . . . . . 29 Developing and executing on other platforms . . . . . . . . . . . . . . . . . . . . . . . . 30 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Chapter 2: C# Primer . . . . . . . . . . . . . . . . . . . . . . . . . 33 Data types in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Variables and memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 The stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 The heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Object-oriented programming in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Structs in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Strings in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Comparing strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Manipulating strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 StringBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Conditional logic in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Comparison operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Selection statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 if-else statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 switch statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Looping in C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 while statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 do-while statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 for statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 foreach statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Chapter 3: Basics of an ASP.NET Project . . . . . . . . . . . . . . . 61 Getting started in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Server controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Code-behind files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Page_Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Flash server control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Adding a control to the Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Using the epicFlashControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 FlashVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Embedding FlashVars using the epicFlashControl . . . . . . . . . . . . . . . . . . 84 vi CONTENTS A practical example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Moving the navbar to ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Chapter 4: Two-Way ASP.NET/Flash Communication . . . . . . . . 99 The request-response model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 HTTP request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 GET and POST variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 HTTP response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ASP.NET Request object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ASP.NET Response object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Using the Request and Response objects . . . . . . . . . . . . . . . . . . . . . . . . 104 The try-catch-finally statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Sending mail using ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Configuring IIS to relay mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Using loadVars to call an ASP.NET page . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Example: Using loadVars in the navbar . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Example: Flash e-mail form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 ASP.NET loadVars handler page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Back to the Flash form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Tying it all together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Chapter 5: XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 The history of XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Elements of an XML document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Text elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Start tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 End tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Character data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Chapter 6: Communicating Using XML . . . . . . . . . . . . . . . 147 Flash animation using the Zigo tweening engine . . . . . . . . . . . . . . . . . . . . . . 148 C# System.IO namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 System.IO.Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Server.MapPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 System.IO.File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 XML communication with the Flash XML object . . . . . . . . . . . . . . . . . . . . . . 153 C# System.Xml namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 XmlTextReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Example of using the XmlTextReader . . . . . . . . . . . . . . . . . . . . . . . . 155 XmlTextWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 vii CONTENTS Image gallery using XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Logical tier: ASP.NET server-side code . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Presentation tier: Flash interface . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Chapter 7: Web Services . . . . . . . . . . . . . . . . . . . . . . . 191 Introducing web services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Web service standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Creating an ASP.NET web service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Creating the GetArea web method . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Using the Flash XML Web Service Connector . . . . . . . . . . . . . . . . . . . . . . . . 206 Defining a web service in Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Flash Web Service Connector component . . . . . . . . . . . . . . . . . . . . . . . 208 Connecting to the HelloWorld web service method . . . . . . . . . . . . . . . . . . 208 GetArea web service example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Creating the interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Initializing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Receiving the result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Completing the code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Chapter 8: The Google Web Service API . . . . . . . . . . . . . . 219 Consuming third-party web services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Signing up for the Google web service API . . . . . . . . . . . . . . . . . . . . . . . 221 Creating a web service proxy using ASP.NET . . . . . . . . . . . . . . . . . . . . . . 222 Using an Application class in ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . 226 Creating a Flash presentation tier for the Google web service . . . . . . . . . . . . . . 227 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Chapter 9: Database Connectivity . . . . . . . . . . . . . . . . . 235 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Using SELECT statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Using UPDATE statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Using INSERT statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Using DELETE statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Introducing ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 DataSet vs. DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Read-write access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Data direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Database access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Speed of access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Connected vs. disconnected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Working with ADO.NET data providers . . . . . . . . . . . . . . . . . . . . . . . . . 241 Data provider elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 viii CONTENTS Connecting to an Access database . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Working with commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Working with DataReaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 DataAdapters and DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Using DataAdapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Using DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Filling a DataSet and passing it to Flash using a web service . . . . . . . . . . . . . 253 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Chapter 10: Product Viewer Application . . . . . . . . . . . . . . 257 Setting up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Creating the Microsoft Access data tier . . . . . . . . . . . . . . . . . . . . . . . . . 258 Creating the ASP.NET logical tier . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Creating the Flash presentation tier . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Chapter 11: Session State and Security . . . . . . . . . . . . . . . 281 Session state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 ASP.NET server-side state management . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 ASP.NET application state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 ASP.NET session state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 The ASP.NET global.asax file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Adding a global.asax file to an ASP.NET project . . . . . . . . . . . . . . . . . . 287 Using session state in ASP.NET web services . . . . . . . . . . . . . . . . . . . . . . 289 Using application state in ASP.NET web services . . . . . . . . . . . . . . . . . . . . 291 Adding a shopping cart to the storefront example . . . . . . . . . . . . . . . . . . 293 Securing an ASP.NET web service using session state . . . . . . . . . . . . . . . . . . . 303 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Chapter 12: Flash Remoting . . . . . . . . . . . . . . . . . . . . . 309 Why Flash Remoting? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 The technology behind Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Examining the methods for using Flash Remoting . . . . . . . . . . . . . . . . . . . . . 313 Setting up Flash Remoting .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Installing the Flash Remoting service . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Examining the files within the flashremoting directory . . . . . . . . . . . . . . 315 Installing the Flash Remoting components . . . . . . . . . . . . . . . . . . . . . . . 316 ActionScript 2.0 Flash Remoting Connector . . . . . . . . . . . . . . . . . . . . . . . . 316 NetConnection Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Enabling the Flash Remoting NetConnection Debugger . . . . . . . . . . . . . . . . 317 Connecting to an ASP.NET page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Creating the ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Creating the Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Accessing ASP.NET session state via Remoting . . . . . . . . . . . . . . . . . . . . . 323 Setting up the ASP.NET page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Creating the Flash interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Testing the code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 ix CONTENTS Connecting to a .NET DLL via Flash Remoting . . . . . . . . . . . . . . . . . . . . . 327 Creating a .NET DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Calling DLLs from Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Passing data from a .NET DLL to Flash . . . . . . . . . . . . . . . . . . . . . . . . . 331 Setting up the DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Retrieving the DataSet in Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Passing objects from .NET to Flash via Remoting . . . . . . . . . . . . . . . . . . . 334 Retrieving the objects in Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Passing objects from Flash to .NET via Remoting . . . . . . . . . . . . . . . . . . . 337 Sending an object from Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Connecting to a third-party web service using Remoting . . . . . . . . . . . . . . . 339 Potential problems with web services and Flash Remoting . . . . . . . . . . . . 341 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Chapter 13: Creating a Video Weblog Using SQL Server and Flash Remoting . . . . . . . . . . . . . . . . . . . . . . . . . 345 File uploading with Flash and ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 The Flash.net.FileReference class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Handling file uploads in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Uploading a file from Flash to ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . 348 Creating a video weblog using .NET Flash Remoting and SQL Server . . . . . . . . . . 355 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Creating a new database on SQL Server with Visual Studio .NET 2005 . . . . . 357 Stored procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Creating a new stored procedure in Visual Studio . . . . . . . . . . . . . . . . 360 Creating stored procedures for the video weblog . . . . . . . . . . . . . . . . . 362 Creating the ASP.NET logical tier . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Executing a stored procedure using a SqlCommand . . . . . . . . . . . . . . . 364 Creating the BlogEntries.cs file . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Creating the Flash admin presentation tier . . . . . . . . . . . . . . . . . . . . . 370 Creating the video weblog front-end . . . . . . . . . . . . . . . . . . . . . . . . 384 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 x ABOUT THE AUTHOR After leading an artificial intelligence team at the University of Minnesota and graduating with a degree in electrical engineering and computer science, Ryan Moore started Green Lizard Computing in Minneapolis, Minnesota, in 1999, where he developed web applications using a combination of ASP, PHP, and Flash. In 2001, he cofounded Balance Studios in Green Bay, Wisconsin, where he is currently the technical director. At Balance Studios, Ryan architects and develops web-based applications using technologies ranging from Shockwave 3D to ASP.NET and Flash. In 2003, Ryan also cofounded epicsoft, LLC, of Green Bay, Wisconsin, where he is the lead soft- ware engineer, designing and developing desktop and web-based applications for the creative and development communities using a combination of C# and Flash. Ryan is also a Certified Macro- media Flash Developer, teaches classes on Internet technologies at ITT Technical College, speaks at technology conferences, and authors articles for a variety of technology magazines. Ryan maintains an ASP.NET–Flash weblog, which can be found at http://blogs.ittoolbox.com/c/engineering/. xii