Live Blogging – MSDN Mid-Atlantic Roadshow
Today I am in Roanoke, VA at the MSDN Mid-Atlantic Roadshow. This Microsoft event highlights Web development and .NET 3.5.
Web Development Basics – 9am
Presented by Andrew Duthie, Microsoft Technology Evangelist. Andrew presents a nice history and overview of web development, from HTML/XHTML, Classic ASP, and up to ASP.NET. It definitely confirms my opinion that I am glad I never was a Classic ASP developer!
He discussed Postback and ViewState, (my least favorite features of ASP.NET and hence my appreciation of ASP.NET MVC.) I know this is not a popular ASP.NET view point, but it makes it difficult for traditional web developers like myself to step into an ASP.NET role. One thing he mentioned was that you can disable ViewState for particular controls, for performance reasons. You would only do this if the element was for display only.
He also discussed one of my favorite features, Master Pages. I have long used this same concept in PHP development and I immediately recognized it in ASP.NET.
Note to self: learn about Membership Profiles. I’ve been developing my own because I am connecting to a non-standard data source (IBM iSeries DB2). Andrew said you can write your own custom backend but still use the built in Profile features.
DataBinding Demo: he showed a typical GridView Control bound to a SqlDataSource. “Declarative Data Binding” – there is no executable code that drives the GridView, it is all expressed in the ASPX. It is fast and easy to develop, but you still have the option to develop your own binding for more control.
Web Services: ASMX and WCF Services both supported. ASMX is simpler, and hosted on IIS, but harder to make cross platform capable. WCF is more complex to configure and can be hosted by any .NET process. ADO.NET Data Services uses WCF. WCF can be used to communicate between servers and applications. “ABC”s of WCF: Address, Binding, Contract. I think it’s time I learned about WCF…
What’s New in the .NET 3.5 Framework for Web Developers and Intro to ASP.NET MVC – 10:40am
Zhiming Xue, Architect Evangelist.
New features introduced in .NET 3.5 SP1: ADO.NET Entity Framework, ASP.NET Dynamic Data, ADO.NET Data Services, ASP.NET Routing.
ADO.NET Entity Framework
Microsoft’s 1st ORM offering for .NET. Designed for providing a UI for ORM development.
- Entity Data Modle (EDM) separates objects from their Data Structures. Objects are mapped to their physical data store via three things: Conceptual Schema Definition (CSDL), Storage Schema Definition (SSDL), and the Mapping Specification (MSL). This approach decouples the DB Schema from the Application Model. This provides flexibility and can be platform independent (requires an Entity Data Provider.)
- Entity Framework is a set of services that allow you to consume EDM from within your applications. It includes Object Services, Entity Client, EntitySQL, and Linq-to-Entities.
- Visual Studio Support is supposed to make the development seamless and simple.
DataSets are raw data store connections. Linq To SQL provides an ADO.NET connection to SqlServer. Entity Framework is going to allow ORM connections to most any database.
DEMO: Z wrote live a WPF application that consumes EDM. Create a WPF solution. Add a DLL project and add a new ADO.NET Entity Model item to the project. Select the data connection and store it in the Web.config file. The database is diagrammed in Visual Studio, complete with relationships. It also creates a Mapping Details window, which he did not demonstrate, but it looks like that is where you change the mapping. The EDMX file contains the XML definition of the SSDL and CSDL. Copy the App.Config file from the EDM project to the WPF project – this links the WPF to the correct Data Store. Add an xxxEntities model object to instantiate the connection. Very fast development, very impressive results in less than 5 minutes!
ASP.NET Dynamic Data
Data driven web application scaffolding. If you are unfamiliar, scaffolding, popularized by Ruby on Rails, provides default pages for Insert, Update, Delete, etc. DD is based on an object model with full controls, metadata, validation, etc. This is expressed in two new ASP.NET project types: Entity Data Model and Linq To SQL.
DEMO: Z added a Dynamic Data Web Application to the above demo so that he could tie in to the same EDM code he already produced. Set the connection stream in the Web.config file to connect the site to the EDM data store. Apparently DD is set up assuming Linq, so Z had to make changes to the Page Templates to use the EDM instead. He had to change LinqDataSource to EntityDataSource. Then he had to register the EDM assembly within the individual pages. (Couldn’t you do this once in Web.config?)
The default scaffolding is very nice and has all the features you would expect. I saw a Routing mechanism, but he did not really discuss how it is used. He demonstrated custom validation. It uses System.ComponentModel.DataAnnotations and implements events for validation.
Overall it looks interesting, but I’m not sure yet how it would be used in a real world setting.
ADO.NET Data Services
Formerly “Astoria”, this technology exposes data in a secure fashion over the web or network. It is a combination of patterns and libraries that enable the creation and consumption of data services for the web as “feeds”. This does not have to be a database: it can be any data source.
- Implemented as ATOM – tables = feeds, rows = entities. Includes CRUD, is RESTful, and a URI points to a resource.
- Uses common URL syntax
- Capable of exposing any object model that contains IQueryable<T>, such as Linq to SQL and EDM.
- Locked down by default and supports Operation Batching
- Supports optimistic concurrency
DEMO: Z added a ADO.NET Data Service item to the above Web project. You have to update the service code to indicate what the model is and set some rules. It was a lot of copy and paste and went by too quickly to document. At this point he basically lost me. He hard coded the port the service executed on. He generated a file using DataServiceUTIL.exe (but never executed the app that I saw) and then copied the file into the WPF solution. He added a reference in the XAML to the service and a pointer to the service in App.config. He did finally get it working, and it is interesting, but again I’m not sure how I would use it.
ASP.NET Routing
Routing maps an application URL to specific handlers. I have been using this in ASP.NET MVC for a while, and they have always said that this was not limited to MVC. His example used DynamicDataRoute() instances. At this point his time was running short, so he didn’t really go into a lot of details.
ASP.NET MVC
As we know, MVC has been in my sights for a while now, and I have been very pleased with the implementation. To be fair to Z, he was really rushing to get through this because of time. Unfortunately, I think he skipped a lot of important basics, but he did at least demo the default and the Task List projects. He really skimmed over the project types, and in the long run I think he just confused anyone who was not already familiar with MVC. Last but not least, he only mentioned that you could use Unit Testing, but did not demo it at all.
AJAX Development and Troubleshooting – 1pm
Andrew Duthie presenting. AJAX is a system of lightweight calls to the server without having to repost the entire web page. I have used AJAX extensively in ASP.NET MVC using jQuery.
ASP.NET AJAX
- Simple Development Framework
- Represented as additional libraries to ASP.NET
- Two Models:
- UpdatePanel Control (zero code implementation)
- ScriptManager Control (provides a rich framework of JavaScript libraries)
Included with .NET 3.5. AJAX Control Toolkit is a separate project available from CodePlex. The AJAX libraries work on Windows, Mac OS, and Linux in IE, Firefox, Opera, Safari, and others.
DEMO: Andrew created an AutoComplete textbox sample. Create a Web Form and add an AJAX Form to it, which automatically set up the ScriptManager. Add a reference to the AjaxControlToolkit. Now all the Extenders are available in the toolbox. Drag an AutoCompleteExtender to the page and set up a few attributes to hook into a data source. Viola! Good demo.
AJAX updates in .NET 3.5 SP1:
- Browser History – allows an Ajax page to be bookmarked for future return (including page data)
- Script Combining – batches a set of Scripts to be treated as a single download
ANNOUNCEMENT: jQuery will be included in all future versions of Visual Studio! It is to be treated as a first class citizen, complete with jQuery support. Microsoft will even have full PSS support. ASP.NET MVC will be the first ship of this feature.
AJAX Troublesooting
While it is a great tool, Visual Studio is not enough. You also need tools for CSS, DOM, and Scripting analysis.
- The IE Developer Toolbar allows you to drill down into your code and is especially good for IE 6 and IE7. IE8 has built in developer tools including JavaScript debugging, dynamic CSS changes, and more.
- Firebug is a similar tool for Firefox.
- Firebug Lite is a tool that can be run without being installed (runs as a JavaScript app.)
- httpwatch (IE and Firefox Only) – basic is free, pro costs money
- fiddler – interaction record log
Other Frameworks
Andrew then spent the rest of the session showing some cool AJAX and JavaScript components.
Microsoft Silverlight 2.0
Ashish Jaiman, ISV Architect Evangelist
Silverlight is a cross browser, cross platform .NET plugin for delivering Rich Experiences in a browser. Silverlight runs in the browser sandbox and executes .NET code. Can be hosted in any container element in HTML. HTML can be overlaid on top of Silverlight elements, and you can have many Silverlight components on a single page.
Silverlight 1.0 was only HTML and JavaScript. Silverlight 2.0, on the other hand, includes a mini CLR, WPF controls, LINQ, collections, media, layout controls, and more. Silverlight 2.0 has local storage, FileOpen capabilities, sockets, and cross domain HTTP requests.
Silverlight Pros:
- Video/Audio
- Enhanced UX to increase stickiness
- Decrease the learning curve
- High resolution imagery
- Data Visualization
- Leverage .NET Skills for cross browser/cross platform solutions
Silverlight Cons:
- Requires a browser plugin
- There is still a learning curve
- Need for designers to take full advantage
Designer and Developer Collaboration
This brings up one of the main problems with WPF and Silverlight. Microsoft’s belief is that developers should focus on developing data, communications, business rules, etc. Designers should be the ones designing our user experiences. As a one man shop, I can tell you that this isn’t going to happen, but I understand Microsoft’s point.
In order to really maximize the XAML abstraction concept, it will truly take a designer’s touch wrapped around a developer’s logic. XAML is simply a description of a user interface in XML and contains no code. A designer can then use tools like Expression Blend (2.5 for Silverlight 2.0) to design the interface, which will then export the design as XAML. Visual Studio then can read the XAML and allow the developer to add any necessary application logic. In fact, Blend and Visual Studio can be opened and used simultaneously against the same code, which is more realistic for someone in my shoes.
ASP.NET includes Silverlight support via the <asp:xaml> and <asp:media> tags, Silverlight has web-service support, and it can utilize the Membership, Profile, and Application Service integration. IIS 7.0 also includes specific support for Silverlight.
Here is a pretty cool Silverlight demo. (Go to the “Patient Journey Demonstrator”)
Styling and skinning are completely customizable, which is one of the main points of WPF technologies: however you can imagine visualizing your data or application, then you should be able to make it a reality in WPF/Silverlight.
Local Storage
“Cookies on steroids”, local storage provides 1MB of application specific local information. Can be expanded if the user allows it. Exposed through Microsoft Isolated Storage.
DOM Integration
Silverlight is still a browser application, so it can interact with and create HTML elements and scripts through .NET code.
Open File Dialog
You can use this to open a local file on the client.
LINQ
Silverlight 2.0 has LINQ support as part of its CLR. Currently only on IEnumerable<T>, but XLINQ and DLINQ are in development.
Data Acquisition
Silverlight supports the following Methods:
- GET, POST,
- Headers
- Background threads
- Streaming
- Cross domain access (ClientAccess.xml, a subset of CrossDomain.xml)
- WebClient and HttpWebRequest/Response
The session ended when the instructor’s computer went belly up.
MSDN Subscription
Just had to share: my “Welcome to MSDN” email just showed up.? And hey, it only took 7 days and 12 hours!? Three cheers for the largest tech company in the world!!!
MSDN Notes from a first time subscriber.
If you’ve been following my journey, you’ll know that Monday morning, after 4 years as a .NET developer, I finally subscribed to MSDN.? I did so in anticipation of the release of Visual Studio 2008, which occurred Monday afternoon.? Needless to say, I was very excited by all this.? My excitement began to dwindle though, the longer I had to wait to get confirmation of my MSDN subscription.
Finally, Tuesday afternoon, I was able to get confirmation over the phone and received my Subscriber Benefits Number (the magic number that lets you in to all of MSDN’s goodies).? Oh, and I still haven’t received any kind of email notification that the process has been completed, so if I hadn’t gotten impatient and called I’d still be waiting.
So yesterday afternoon I began the VS2008 RTM download.? It is 3.31 GB, so it will naturally take a long time to download.? When I left to go home, it was about 30% finished.? I figured that it would finish downloading, and that this morning I would be knee-deep into installation.? Unfortunately, at 2.01 GB, the Download Manager experienced a fatal error.? I could not resume the download and had to restart it again from scratch this morning.? I feel like Charlie Brown when Lucy pulls the football up on him at the last second.? Good Grief!
OK, so I’m just full of complaints today:
- It seems I have to reenter my Live password every 3-4 pages.? I’ve reenterred it at least three times in the last 40 minutes (and that is with the “Remember my userid and password” box checkd on the login page.
- One time when I reentered the login, I was sent to a “Session expired page” and had to log in AGAIN.
- I like the MSDN interface better than the MSDN Subscriber interface, it would be nice if they standardized the two.
OK, so I’m just nitpicking this morning because I’m frustrated.? I really hope I can finish this download today so I can play over the holiday! (Sheesh, now I’m rhyming.? Time to quit for now…)