Web 2.0 mit ASP.NET 2.0
Daniel Fisher(lennybacon)
newtelligence AG
Michael Willers
newtelligence AG
Was ist Web 2.0
„Web 2.0 is a marketing slogan“
Russell Shaw (ZDNet)
2
Was ist Web 2.0
„Web 2.0, a phrase coined by O'Reilly
Media in 2004, refers to a supposed
second-generation of Internet-based
services — such as social networking
sites, wikis, communication tools, and
folksonomies — that let people
collaborate and share information online
in previously unavailable ways.“
Wikipedia
3
2.0 ohne Web?
4
Was ist Web 2.0?
5
Technologiespektrum
6
7 Tennets of Web 2.0
• The Web As Platform
• Architecture of participation
• Information as the Core Capability, Not Software
• End of Discrete Software Releases
• Rich User Experiences
• Fundamentally Federated Software Systems
• Lightweight Programming Models
7
Architecture of Participation
• Die aktive Teilnahme von „Usern“ am
Geschehen...
• Wikis
• Flickr
• Blogs, Kommentare & Abonnements
• Foren
• Chats
8
Architecture of Participation
• „User“ als Co-Developer sehen
• Feedback
• Contributions
9
Information as core capability
• Nie vergessen: Wir arbeiten vielleicht
nicht direkt mit Menschen. Aber
Menschen arbeiten direkt mit unser
Arbeit.
10
Information as core capability
• Daten und Funktionalität anbieten – nicht
eine einschränkende Softwarelösung
• Vielleicht will jemand unsere Daten mit
anderen Daten verknüpfen und eine neue
Anwendung entsteht
11
End of Discrete Software Releases
• Geschäftsprozesse sind sich in einer
Umgebung entwickelnde, wachsende und
veränderbare Abläufe
• Software sollte ebenbürtig lebendig sein
• Software als Dienstleistung, nicht als
Produkt
• Kostengünstige skalierbarkeit
12
End of Discrete Software Releases
• Formaler Prozess:
• Unit Tests
• Integration Tests
• ...
• „Beta“ als Teil des Development lifecycle
• User partizipieren als Tester
• User haben „Einfluss“
13
Rich User Expirience
multiple devices
• Computer
• Mobile
• PDA
• Phone
• Home Electronics
• Media Center
• TV
• ...
14
Rich User Expirience
User Interfaces
• XHTML, CSS & Javascript
• Flash
• Windows Presentation Foundation (WPF)
15
Rich User Expirience
User Interfaces
• Animation
• Drag‘n‘Drop
• ...
• Gefühlte Geschwindigkeit
• „...und Bunt muss es sein ...“
16
Fundamentally Federated Software Systems
Clients: Mashups
• Fasst Informationen zusammen und
kombiniert sie – wie ein Portal
• Modularität und Wiederverwendung von
backend Funtionalität und Daten
• Das LEGO-Prinzip
17
Fundamentally Federated Software Systems
Kommunikation
• Kommunikationsmuster
• Mensch zu Mensch
• Mensch zu Computer
• Computer zu Mensch
• Computer zu Computer
18
Fundamentally Federated Software Systems
Kommunikation
• Cross-Browser-Kompatibilität
• Ist ein Client eines Web Services nicht
auch ein device?
• Und wenn ein anderer Client auf einer
anderen plattform implementiert wird?
• Interoperabilität
19
Fundamentally Federated Software Systems
Backend: Datenhaltung
• Kontrollierte offerierung von Daten ohne
kontrolle über deren Nutzung
• Syndication
• Wiederverwendbarkeit
20
Klassische Topologie
21
Mashup Topologie
22
Anforderungen and Backend
• Policy-negotiated behavior
• Backend definiert Kommunikation
• Explicitnes of boundaries
• Anfrage liefert kopie einer Datenmenge!
• Autonomy
• Kapselung von Datenzugriffs- und Geschäfts-Logik
• Contract/Schema Exchange
• Backend definiert Funktionalität
23
SOA und Web 2.0?
• Unterschied: Sozialer und collaborativer
Anspruch
• Aber sozialen und collaborative Ansprüche
darf eine SO-Anwendung auch haben!
24
Kommunikation ist der Schlüssel
• Aber wie gestaltet man Kommunikation
interoperabel und genügt den
Geschwindigkeitsansprüchen der „User“?
25
Problemanalyse
• Wie funktioniert Kommunikation?
• Und in der realen Welt?
• Priorisiert geordnet und Asynchron
• „Anti-Request-Reply“
• Mit HTTP?
26
Asynchron – Wo?
27
Asynchrone Kommunikation
• Präsentationsschicht
• Programmschicht
• Infrastrukturschicht
28
Asynchrone Präsentationsschicht
• Nach dem initialen Request/Response und
dem anzeigen der Seite wird bei jedem
„Klick“ ein Request/Response ausgeführt.
• Im „Hintergrund“Daten übertragen.
• Nur Daten übertragen die benötigt werden.
• Keine Navigation, Grafiken oder Markup – Daten.
30
ASP.NET ClientSideCallbacks
ASP.NET ClientSideCallbacks
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head" runat="server“>
<script type="text/ecmascript">
function ReceiveServerData(rValue){
document.getElementById('Results').innerHTML = rValue;
}
</script>
</head>
<body>
<form id="form1" runat="server“>
<asp:ListBox ID="ListBox1" Runat="server“>
<asp:ListItem Text="Cheese" Value="Cheese" />
</asp:ListBox><br />
Items in stock:
<div id="Results" runat="server“ />
</form>
</body>
ASP.NET ClientSideCallbacks
public partial class _Default : Page, ICallbackEventHandler
{
protected string returnValue;
protected void Page_Load(object sender, EventArgs e)
{
string cb = Page.ClientScript.GetCallbackEventReference(
this, "arg", “ReceiveServerData", "");
ListBox1.Attributes["onchange"] =
cb.Replace(
"arg", "this.options[this.selectedIndex].text");
}
public void RaiseCallbackEvent(string eventArgument){
returnValue = "10";
}
public string GetCallbackResult(){
return returnValue;
}
}
RemoteScripting vs. AJAX
• RemoteScripting
• Ein Java Applet/ActiveX Control leitet clientseitige Anfragen
an den Server
• Nachteil: Java/ActiveX benötigt
• Vorteil: Broadcast möglich
• AJAX
• Javascript: Events und XmlHttpRequests
• Vorteil: NUR Scriptingfähigkeit des Browsers
• Nachteil:
• Keine „Events“ vom Server
• Ugly Code...
AJAX
var request = new Request();
function _getXmlHttp()
{
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
var progids=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]
or (i in progids) {
try { return new ActiveXObject(progids[i]) }
catch (e) {}
}
@end @*/
try { return new XMLHttpRequest();}
catch (e2) {return null; }
}
function Request() {
this.Get = Request_get;
this._get = _getXmlHttp();
if (this._get == null) return;
}
AJAX
• Funktioniert nur mit „Ugly Hacks“
• Oder nur mit einem Browser-Typ
• Javascript ist nicht typisiert
• ...
• Codieren wie Ende der 90er?
Welcome to WEB 0.5?
Lightweight Programming Models
Atlas
• Eine Serverseitiges Framework für AJAX
• Plattform und Browser-Kompatibel
• Objektorientierte Serverseitige API
• Declaratives model
• Steuerelemente
• Toolunterstützung für Designer und
Entwickler
• Kostenlos, Supported, Einfach zu benutzen
37
ASP.NET Atlas
Lightweight Programming Models
Atlas Code
<atlas:ScriptManager ID="sm1" runat="server" EnablePartialRendering="true" />
<atlas:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Button ID=“B" Text="GetData" runat="server" OnClick=“B_Click" />
<br />
<asp:Label ID="Message" runat="server" />
</ContentTemplate>
</atlas:UpdatePanel>
public partial class _Default : System.Web.UI.Page
{
protected void B_Click(object sender, EventArgs e)
{
Message.Text = "Button1 was clicked";
}
}
Asynchrone Programmschicht
• .NET
• Threads
• Timer
• IAsyncResult design pattern & Delegate Invocation
• AsyncCallbacks & Event-based Asynchronous Pattern
• ASP.NET
• ASP.NET Async Pages
• ASP.NET Async Tasks
39
40
Async Pages & Tasks mit ASP.NET
Asynchrone System-Architekturen
• Synchron
• Asynchron
Entkoppelung durch MessageQueing
ASP.NET und MessageQueing
• Anfrage in RequestQueue schreiben
• Warten auf Antwort in ResponseQueue
using (MessageQueue responseQueue = new MessageQueue(queuePath))
{
responseQueue.MessageReadPropertyFilter.CorrelationId = true;
Message objMessage =
responseQueue.ReceiveByCorrelationId(
correlationId,
new TimeSpan(0, 0, 0, timeOut),
MessageQueueTransactionType.None);
}
WCF und MSMQ
• Windows Communication Foundation (WCF) sieht MSMQ
einfach als Transport-Kannal wie TCP oder HTTP.
• WCF ermöglicht es erst zum Deployment konfigurativ den
Transport zu wählen.
43
44
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service
name="FullfilmentServiceAgent">
<endpoint
address="net.msmq://localhost/private/Fullfilment"
binding="netMsmqBinding"
contract="IFullfilmentService" />
</service>
</services>
</system.serviceModel>
</configuration>
45
MSMQ

2006 - Basta!: Web 2.0 mit asp.net 2.0

  • 1.
    Web 2.0 mitASP.NET 2.0 Daniel Fisher(lennybacon) newtelligence AG Michael Willers newtelligence AG
  • 2.
    Was ist Web2.0 „Web 2.0 is a marketing slogan“ Russell Shaw (ZDNet) 2
  • 3.
    Was ist Web2.0 „Web 2.0, a phrase coined by O'Reilly Media in 2004, refers to a supposed second-generation of Internet-based services — such as social networking sites, wikis, communication tools, and folksonomies — that let people collaborate and share information online in previously unavailable ways.“ Wikipedia 3
  • 4.
  • 5.
  • 6.
  • 7.
    7 Tennets ofWeb 2.0 • The Web As Platform • Architecture of participation • Information as the Core Capability, Not Software • End of Discrete Software Releases • Rich User Experiences • Fundamentally Federated Software Systems • Lightweight Programming Models 7
  • 8.
    Architecture of Participation •Die aktive Teilnahme von „Usern“ am Geschehen... • Wikis • Flickr • Blogs, Kommentare & Abonnements • Foren • Chats 8
  • 9.
    Architecture of Participation •„User“ als Co-Developer sehen • Feedback • Contributions 9
  • 10.
    Information as corecapability • Nie vergessen: Wir arbeiten vielleicht nicht direkt mit Menschen. Aber Menschen arbeiten direkt mit unser Arbeit. 10
  • 11.
    Information as corecapability • Daten und Funktionalität anbieten – nicht eine einschränkende Softwarelösung • Vielleicht will jemand unsere Daten mit anderen Daten verknüpfen und eine neue Anwendung entsteht 11
  • 12.
    End of DiscreteSoftware Releases • Geschäftsprozesse sind sich in einer Umgebung entwickelnde, wachsende und veränderbare Abläufe • Software sollte ebenbürtig lebendig sein • Software als Dienstleistung, nicht als Produkt • Kostengünstige skalierbarkeit 12
  • 13.
    End of DiscreteSoftware Releases • Formaler Prozess: • Unit Tests • Integration Tests • ... • „Beta“ als Teil des Development lifecycle • User partizipieren als Tester • User haben „Einfluss“ 13
  • 14.
    Rich User Expirience multipledevices • Computer • Mobile • PDA • Phone • Home Electronics • Media Center • TV • ... 14
  • 15.
    Rich User Expirience UserInterfaces • XHTML, CSS & Javascript • Flash • Windows Presentation Foundation (WPF) 15
  • 16.
    Rich User Expirience UserInterfaces • Animation • Drag‘n‘Drop • ... • Gefühlte Geschwindigkeit • „...und Bunt muss es sein ...“ 16
  • 17.
    Fundamentally Federated SoftwareSystems Clients: Mashups • Fasst Informationen zusammen und kombiniert sie – wie ein Portal • Modularität und Wiederverwendung von backend Funtionalität und Daten • Das LEGO-Prinzip 17
  • 18.
    Fundamentally Federated SoftwareSystems Kommunikation • Kommunikationsmuster • Mensch zu Mensch • Mensch zu Computer • Computer zu Mensch • Computer zu Computer 18
  • 19.
    Fundamentally Federated SoftwareSystems Kommunikation • Cross-Browser-Kompatibilität • Ist ein Client eines Web Services nicht auch ein device? • Und wenn ein anderer Client auf einer anderen plattform implementiert wird? • Interoperabilität 19
  • 20.
    Fundamentally Federated SoftwareSystems Backend: Datenhaltung • Kontrollierte offerierung von Daten ohne kontrolle über deren Nutzung • Syndication • Wiederverwendbarkeit 20
  • 21.
  • 22.
  • 23.
    Anforderungen and Backend •Policy-negotiated behavior • Backend definiert Kommunikation • Explicitnes of boundaries • Anfrage liefert kopie einer Datenmenge! • Autonomy • Kapselung von Datenzugriffs- und Geschäfts-Logik • Contract/Schema Exchange • Backend definiert Funktionalität 23
  • 24.
    SOA und Web2.0? • Unterschied: Sozialer und collaborativer Anspruch • Aber sozialen und collaborative Ansprüche darf eine SO-Anwendung auch haben! 24
  • 25.
    Kommunikation ist derSchlüssel • Aber wie gestaltet man Kommunikation interoperabel und genügt den Geschwindigkeitsansprüchen der „User“? 25
  • 26.
    Problemanalyse • Wie funktioniertKommunikation? • Und in der realen Welt? • Priorisiert geordnet und Asynchron • „Anti-Request-Reply“ • Mit HTTP? 26
  • 27.
  • 28.
    Asynchrone Kommunikation • Präsentationsschicht •Programmschicht • Infrastrukturschicht 28
  • 29.
    Asynchrone Präsentationsschicht • Nachdem initialen Request/Response und dem anzeigen der Seite wird bei jedem „Klick“ ein Request/Response ausgeführt. • Im „Hintergrund“Daten übertragen. • Nur Daten übertragen die benötigt werden. • Keine Navigation, Grafiken oder Markup – Daten.
  • 30.
  • 31.
    ASP.NET ClientSideCallbacks <html xmlns="http://www.w3.org/1999/xhtml"> <headid="Head" runat="server“> <script type="text/ecmascript"> function ReceiveServerData(rValue){ document.getElementById('Results').innerHTML = rValue; } </script> </head> <body> <form id="form1" runat="server“> <asp:ListBox ID="ListBox1" Runat="server“> <asp:ListItem Text="Cheese" Value="Cheese" /> </asp:ListBox><br /> Items in stock: <div id="Results" runat="server“ /> </form> </body>
  • 32.
    ASP.NET ClientSideCallbacks public partialclass _Default : Page, ICallbackEventHandler { protected string returnValue; protected void Page_Load(object sender, EventArgs e) { string cb = Page.ClientScript.GetCallbackEventReference( this, "arg", “ReceiveServerData", ""); ListBox1.Attributes["onchange"] = cb.Replace( "arg", "this.options[this.selectedIndex].text"); } public void RaiseCallbackEvent(string eventArgument){ returnValue = "10"; } public string GetCallbackResult(){ return returnValue; } }
  • 33.
    RemoteScripting vs. AJAX •RemoteScripting • Ein Java Applet/ActiveX Control leitet clientseitige Anfragen an den Server • Nachteil: Java/ActiveX benötigt • Vorteil: Broadcast möglich • AJAX • Javascript: Events und XmlHttpRequests • Vorteil: NUR Scriptingfähigkeit des Browsers • Nachteil: • Keine „Events“ vom Server • Ugly Code...
  • 34.
    AJAX var request =new Request(); function _getXmlHttp() { /*@cc_on @*/ /*@if (@_jscript_version >= 5) var progids=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] or (i in progids) { try { return new ActiveXObject(progids[i]) } catch (e) {} } @end @*/ try { return new XMLHttpRequest();} catch (e2) {return null; } } function Request() { this.Get = Request_get; this._get = _getXmlHttp(); if (this._get == null) return; }
  • 35.
    AJAX • Funktioniert nurmit „Ugly Hacks“ • Oder nur mit einem Browser-Typ • Javascript ist nicht typisiert • ... • Codieren wie Ende der 90er? Welcome to WEB 0.5?
  • 36.
    Lightweight Programming Models Atlas •Eine Serverseitiges Framework für AJAX • Plattform und Browser-Kompatibel • Objektorientierte Serverseitige API • Declaratives model • Steuerelemente • Toolunterstützung für Designer und Entwickler • Kostenlos, Supported, Einfach zu benutzen
  • 37.
  • 38.
    Lightweight Programming Models AtlasCode <atlas:ScriptManager ID="sm1" runat="server" EnablePartialRendering="true" /> <atlas:UpdatePanel ID="up1" runat="server"> <ContentTemplate> <asp:Button ID=“B" Text="GetData" runat="server" OnClick=“B_Click" /> <br /> <asp:Label ID="Message" runat="server" /> </ContentTemplate> </atlas:UpdatePanel> public partial class _Default : System.Web.UI.Page { protected void B_Click(object sender, EventArgs e) { Message.Text = "Button1 was clicked"; } }
  • 39.
    Asynchrone Programmschicht • .NET •Threads • Timer • IAsyncResult design pattern & Delegate Invocation • AsyncCallbacks & Event-based Asynchronous Pattern • ASP.NET • ASP.NET Async Pages • ASP.NET Async Tasks 39
  • 40.
    40 Async Pages &Tasks mit ASP.NET
  • 41.
    Asynchrone System-Architekturen • Synchron •Asynchron Entkoppelung durch MessageQueing
  • 42.
    ASP.NET und MessageQueing •Anfrage in RequestQueue schreiben • Warten auf Antwort in ResponseQueue using (MessageQueue responseQueue = new MessageQueue(queuePath)) { responseQueue.MessageReadPropertyFilter.CorrelationId = true; Message objMessage = responseQueue.ReceiveByCorrelationId( correlationId, new TimeSpan(0, 0, 0, timeOut), MessageQueueTransactionType.None); }
  • 43.
    WCF und MSMQ •Windows Communication Foundation (WCF) sieht MSMQ einfach als Transport-Kannal wie TCP oder HTTP. • WCF ermöglicht es erst zum Deployment konfigurativ den Transport zu wählen. 43
  • 44.
    44 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <services> <service name="FullfilmentServiceAgent"> <endpoint address="net.msmq://localhost/private/Fullfilment" binding="netMsmqBinding" contract="IFullfilmentService" /> </service> </services> </system.serviceModel> </configuration>
  • 45.