480 likes | 577 Views
Overview of Next-gen technologies. Raimond Brookman IT Architect Info Support raimondb@infosupport.com http://blogs.infosupport.com/raimondb. 5 Pillars of Connected Systems. Infocard AD. ASP.NET 2.0 Atlas / WPF. LINQ WinFS. WWF. WCF. Agenda. Introduction
E N D
Overview of Next-gen technologies Raimond BrookmanIT Architect Info Supportraimondb@infosupport.com http://blogs.infosupport.com/raimondb
5 Pillars of Connected Systems Infocard AD ASP.NET 2.0 Atlas / WPF LINQ WinFS WWF WCF
Agenda • Introduction • Windows Presentation Foundation (WPF) • ASP.NET Atlas • Windows Communication Foundation (WCF) • Windows Workflow Foundation (WWF) • C# 3.0, LINQ, DLINQ & XLINQ • Q&A
User Experience Matters Consumer Software HTML DHTML WinFX
Windows Presentation Foundation BUILD THE APPLICATIONS YOU ALWAYS DREAMED OF
Media Integration Layer Base Services Document Services Imaging 2D Text Audio XAML XPS Documents Video Effects 3D Accessibility Packaging Services Animation Input & Eventing User Interface Services Composition Engine Property System Application Services Controls Databinding Deployment Services Layout WPF Capabilities
User Interface Services Application Services Controls Databinding Deployment Services Layout WPF: User Interface Services Layout & Databinding <StackPanel> <Label>Select A Customer</Label> <ListBox Name="myListBox" Background="HoneyDew" ItemsSource="{Binding {StaticResource myDataSource}}" </ListBox> </StackPanel>
projectstructure Window1.xaml.cs Contains: Application logic Created by: Application developer Window1.xaml Contains: Principal UI (controls, layout, etc.) Created by: Application developer or designer Design Experience: By hand or using a visual tool Styles.xaml Contains: Application “style” (visual description of UI elements) Created by: Application designer Design Experience: By hand or using a visual tool Data model, event names, element names, etc. Resource names and element types.
ASP.NET: Future Directions Developing Rich Web Applications With “Atlas”
ASP.NET “Atlas” Goals A FRAMEWORK FOR BUILDING RICHER, MORE INTERACTIVE, MORE PERSONALIZED WEB EXPERIENCES • Increased productivity • Fewer concepts, fewer lines of code • Application and UI building blocks for common scenarios • Easier to author, debug, and maintain • Clean separation of content, style, behavior, and code • Well integrated with design and development tools • Seamlessly integrated application model • Works with ASP.NET pages and server controls • Allows access to ASP.NET-hosted web services and components • Works everywhere – cross-browser, standards based
‘Atlas” Client Script Library ASP.NET “Atlas” Server Extensions Built-in Controls and Behaviors ASP.NET “Atlas” Application Services “Atlas” Client Application Services “Atlas” Server Controls Component and UI Model “Atlas” Web Services Bridge Local Store Base Class Library ASP.NET 2.0 Browser Integration Script Core Page Framework And Server Controls ASP.NET Application Services Browser Compatibility “Atlas” Architecture “Atlas” Client ASP.NET “Atlas” Server “Atlas” HTML Page “Atlas”-enabled ASP.NET Pages “Atlas” Service Proxies ASP.NET-hosted Web Services (ASMX or WCF)
Script-Based Type System • Scenario: • Script code can be ad-hoc, unmaintainable, etc. • Solution: • Encapsulate data and logic into classes and components • Expose intuitive object model • “Atlas” OOP constructs built on top of standard script constructs and techniques • Namespaces • Classes, Interfaces, and inheritance • Properties, methods, events • Private and public members • Delegates • Enumerations and Flags
API Samples var myArray = new Array(‘abc’, ‘ghi’); myArray.push(‘jkl’); myArray.splice(1, 0, ‘def’); var myArray = new Array(‘abc’, ‘ghi’); myArray.add(‘jkl’); myArray.insert(1, ‘def’); var myObject = ...; var s = ‘’; for (var name in myObject) { var value = myObject[name]; s += name + ‘ = ‘ + value + ‘\r\n’; } var myObject = ...; var s = ‘’; for (var name in myObject) { var value = myObject[name]; s += String.Format(‘{0} = {1}\r\n’, name, value, value.length); } var myObject = ‘...’; var sb = new Web.StringBuilder(); for (var name in myObject) { var value = myObject[name]; sb.append(name); sb.append(‘ = ‘); sb.appendLine(value); } var s = sb.toString();
“Atlas” Networking • Client networking stack layered on XMLHTTP • WebRequest, WebResponse, MethodRequest classes • ASP.NET “Atlas” Web Services Bridge • Access to ASP.NET-hosted and serviced components • ASMX and WCF services, .NET objects, ASP.NET page-level services • Automatic client proxy generation • <script src=“MyService.asmx/js” /> • Integrated with ASP.NET intrinsics • Wire format: Javascript object notation { Coordinates : { X: 2.17, Y: 48.51 }, Name : "Eiffel Tower" } public class Location { public Point Coordinates; public String Name; }
Windows Communication Foundation – Why? COM+ Enterprise Services MSMQ System.Messaging ASMX[ with WSE ] .NET Remoting AttributesTransactionsComponents MessagesReliable Simple ConfigurationOpen StandardsService-Oriented Extensible Object-Oriented WindowsCommunicationFoundation
The unified programming model for rapidly building service-oriented applications on the Windows platform Windows Communication Foundation Unifies today’s distributed technology stacks Appropriate for use on-machine, cross machine, and cross Internet Unification ServiceOrientation • Codifies best practices for building distributed applications Interoperates with applications running on other platforms Integrates with our own distributed stacks Integration
Clients and Services Client Service
Endpoints Client Service Endpoint Endpoint Endpoint Endpoint
A A A B B B C C C C B A Address, Binding, Contract Client Service Address Where? Binding How? Contract What? Endpoint
A A A B B B C C C C B A Creating Endpoints ServiceHost Client Service ClientChannel
Binding HTTP Security RM TX Text Inside Bindings Transport Protocol Encoders TCP HTTP Security RM Text MSMQ IPC TX .NET Binary Custom Custom Custom
Standard Bindings T = Transport Security | S = WS-Security | O = One-Way Only
ASMX/WSE3 WCF MSMQ WCF WCF WCF Java WCF ASMX/WSE3 WCF MSMQ WCF Java WCF Integration using Bindings WS-* Protocols *Binding *Binding WS-* Protocols Http/WSBinding WS-* Protocols Http/WSBinding WS-* Protocols Http/WSBinding WS-* Protocols Http/WSBinding MSMQ Protocol MSMQBinding MSMQ Protocol MSMQBinding
Windows Workflow Foundation The workflow framework & tools for Microsoft products and partner/customer ecosystem • Single workflow technology for Windows • Base for Microsoft products and ISV/customer solutions • One technology for human and system workflow scenarios • A framework for building workflow into applications • A framework to build on - not an application or server • Exposed to developers via WinFX • Brings workflow to mainstream .NET development • Transform workflow from niche to mainstream paradigm • Build strong partner & solution ecosystem
…organized into a workflow. Or a state diagram…. Like a flowchart…. What Is A Workflow? A set of activities that coordinate people and / or software... EscalateToManager CheckInventory Example activities….
Participants: people, roles Flow style: flexible, dynamic Data: unstructured, documents • Line of Business Apps • Quote to Cash, Sales Automation… System Workflow Human Workflow • Information Worker • Document Review… • IT Management • New Hire Provisioning, Trouble Ticket,… • Business to Business • Supply Chain Mgmt… • .NET Developer • Pageflow, Service Coordination… CRM ERP Windows Workflow Foundation Workflow Scenario Spectrum Participants: apps, services Flow style: prescriptive, protocols Data: structured, transactional
Workflow And BizTalk Server BizTalk Server • Premium BPM server • Distinct server product • Use in B2B, EAI, BPM scenarios • Deployable solutions • Manageability, Scale-out Accelerators Business Activity Monitor And Admin Tools Design Tools Workflow Orchestration Messaging Transformation • Future version will migrate to Windows Workflow Foundation for orchestration Adapters • Workflow framework • Exposed via WinFX • Broad set of scenarios • Used to build solutions • Enables manageability • and scale-out in solutions • Use for building workflow into apps or workflow-enabled servers Visual Studio Designer WinFX Windows Workflow Foundation
Windows Workflow Foundation Visual Designer Key Concepts AWorkflow Workflows are a set of Activities Workflows run within a Host Process: any application or server AnActivity Developers can build their own Custom Activity Libraries Custom Activity Library Windows Workflow Foundation Components Base Activity Library:Out-of-box activities and base for custom activities Base Activity Library Runtime Engine:Workflow execution and state management Runtime Engine Runtime Services:Hosting flexibility and communication Runtime Services Visual Designer:Graphical and code-based construction Host Process
Visual Designer Design Debug
Getting productive • Today we program against relational and hierarchical data using a language that does not support this natively • Data != Objects • We are busy describing how things need to get done in stead of what we want
C# 3.0 Design Goals • Integrate objects, relational, and XML • Build on foundation laid in C# 1.0 and 2.0 • Run on the .NET 2.0 (“Whidbey”) CLR • Remain 100% backwards compatible
<book> <title/> <author/> <year/> <price/> </book> SQL WinFS Objects XML The LINQ Project C# 3.0 VB 9.0 Others… .NET Language Integrated Query StandardQueryOperators DLinq(ADO.NET) XLinq (System.Xml)
LINQ Style programming class Contact { … }; List<Contact> contacts = new List<Contacts>(); foreach(Customer c in customers) { if(c.State == “WA”) { Contact ct = new Contact(); ct.Name = c.Name; ct.Phone = c.Phone; contacts.Add(ct); } } var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };
Query Expressions • Language integrated query syntax fromidinsource { fromidinsource | wherecondition } [ orderbyordering, ordering, … ] selectexpr | groupexprbykey [ intoidquery ]
C# 3.0 Language Innovations Query expressions var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Local variable type inference Lambda expressions var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone }); Extension methods Anonymous types Object initializers
DLinq For Relational Data Accessing data today Queries in quotes SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone FROM Customers c WHERE c.City = @p0"); cmd.Parameters.AddWithValue("@p0", "London“); DataReader dr = c.Execute(cmd); while (dr.Read()) { string name = dr.GetString(0); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2); } dr.Close(); Loosely bound arguments Loosely typed result sets No compile time checks
DLinq For Relational Data Accessing data with DLinq Classes describe data public class Customer { … } public class Northwind: DataContext { public Table<Customer> Customers; … } Tables are like collections Strongly typed connection Northwind db = new Northwind(…); var contacts = from c in db.Customers where c.City == "London" select new { c.Name, c.Phone }; Integrated query syntax Strongly typed results
XLinq For XML Data Programming XML today Imperative model XmlDocument doc = new XmlDocument(); XmlElement contacts = doc.CreateElement("contacts"); foreach (Customer c in customers) if (c.Country == "USA") { XmlElement e = doc.CreateElement("contact"); XmlElement name = doc.CreateElement("name"); name.InnerText = c.CompanyName; e.AppendChild(name); XmlElement phone = doc.CreateElement("phone"); phone.InnerText = c.Phone; e.AppendChild(phone); contacts.AppendChild(e); } doc.AppendChild(contacts); Document centric No integrated queries Memory intensive <contacts> <contact> <name>Great Lakes Food</name> <phone>(503) 555-7123</phone> </contact> … </contacts>
XLinq For XML Data Programming XML with XLinq Declarative model XElement contacts = new XElement("contacts", from c in customers where c.Country == "USA" select new XElement("contact", new XElement("name", c.CompanyName), new XElement("phone", c.Phone) ) ); Elementcentric Integrated queries <contacts> <contact> <name>Great Lakes Food</name> <phone>(503) 555-7123</phone> </contact> … </contacts> Smaller and faster
XLinq For XML Data • Language integrated query for XML • Expressive power of XPath / XQuery • But with C# or VB as programming language • Leverages experience with DOM • Element centric, not document centric • Functional construction • Text nodes are just strings • Simplified XML namespace support • Faster and smaller
Benefits Of LINQ • Unified querying of objects, relational, XML • Type checking and IntelliSense for queries • SQL and XQuery-like power in C# and VB • Extensibility model for languages / APIs • Describe What, not how boosts productivity