VSone 2010 meine Sessions und Workshop

Obwohl Visual Studio 2010 ein wenig später kommt, ist im Februar in München auf der VSone der richtige Zeitpunkt sich zu dem Thema ausführlich auszutauschen. Für mich als Web Guy, gibt es im ASP.NET Bereich, endlich mal wieder was richtig Neues. Ich werde nicht über ASP.NET MVC sprechen das macht jemand wesentlich kompetenterer, Scott Hanselman von Microsoft. ASP.NET Performance Boost In dieser Session werde ich über optimierungen vom Datenbank Server, über die Web Anwendung bis hin zum HMTL Code aus dem Nähkästchen plaudern. Ich behaupte mal frei erfunden das 90 % aller ASP.NET Anwendungen mit minimalen Aufwand mindestens doppelt so schnell sein könnten. Das bedeutet, das ein Web Server 100% mehr Request pro Sekunde bearbeiten kann. Das ist ja schon mal was. In vielen meiner Projekte ergaben sich sogar Ersparniswerte von über 90%. Silverlight 4 Silverlight ist meiner Ansicht nach die wichtigste Technologie von Microsoft, nach ASP.NET. Trotzdem haben noch nicht viele .NET Developer damit wirklich gearbeitet. Mein Ziel für diese Session ist, einen Überblick zu bieten. Also auch für Entwickler die kaum Ahnung von Silverlight haben. Ein Rundflug rund um die Technologie basierend auf der Version 4. Wer also schon seit Jahren mit SL 3 entwickelt wird deshalb auch viel Bekanntes hören. Umstieg von ASP.NET 2 auf ASP.NET 4 Ich mache auch jedes Jahr einen Workshop auf der VSone. Dieses Jahr möchte ich ASP.NET Experten ansprechen, die in der Regel am Stand von ASP.NET 2 entwicklen. Zwar hat sich mit ASP.NET 3.5 bzw SP1 ein wenig getan in Richtung Datenmodellierung und LINQ. Massiv findet man diese Funktionen  nicht Projekten und es ist auch nicht immer die beste Wahl. Dazu kommt nun mit ASP.NET 4 eine Reihe neuer Features und Verbesserungen im Detail. So werde ich sicher auf neue Controls bzw Änderungen in den Controls eingehen. Als Beispiel das Menu Steuerelement das nun endlich LI Tags rendern kann. Es exisitieren einige neuen EInstellungen auch in der Web.config. Dabei kann z.B. über Cache Provider an der Performance gedreht werden. Ziemlich viel hat sich im Client Teil getan, auch als AJAX bekannt. Templatres, browser seitige Datenbindung, Anbindung an JSON WCF Services oder ADO.NET Dataservice sind nun möglich und werden im Workshop vermittelt. Also dieser Workshop ist für alle ASP.NET Entwickler geeignet die kurz und bündig das wichtigste bis zur Version 4.0 lernen wollen.

User Interface Design mit Expression Blend

Ich muss zugeben, die Links sind original von http://ux.artu.tv/ aber trotzdem echt wertvoll für den Einstieg in User Interface Design. 1 - Principles of Design Series:  Learning about Balance using Expression Design | Video | Assets| 2 - Principles of Design Series:  Learning about Rhythm using Expression Design | Video | Assets | 3 - Principles of Design Series:  Learning about Emphasis using Expression Design | Video | Assets | 4 - Principles of Design Series:  Learning about Symmetry and Asymmetry using Expression Design | Video | Assets | 5 - Principles of Design Series: Learning about Unity using Expression Design | Video | Assets | 6 - Principles of Design Series:  Learning about Points, Lines, and Form using Expression Design | Video | Assets | 7 - Choosing Colors to Complement Your User Interface with Expression Design | Video | Assets | 8 - Experimenting with User Interface Colors with Expression Design | Video | Assets | 9 - Creating Mosaic and Tiled Patterns using Expression Design | Video | Assets | 10 - Learning to Create Icons using Expression Design | Video | Assets | 11 - Creating a Sample Icon using Expression Design | Video | Assets | 12 - Designing a Glassy Button using Expression Design | Video | Assets | 13 - Applying Effects to Bitmap Images using Expression Design | Video | Assets |

Silverlight for Mobile 2010

Gibts nicht? Ich bin gerade über folgende Website gestolpert http://silverlight.net/learn/mobile/ ich zitiere Silverlight for mobile is currently under development. We plan to release the final version in 2009. Aha.

Expression Blend Media Player

In meinen Microsoft Expression Blend Schulungen gehört Video und Audio im Internet zum Standard Inhalt. Mit Expression Encoder ist es ein leichtes aus einem Video eine Silverlight Projekt samt inkludierten Media Player zu generieren. Wem das optisch nicht gefällt, kann auch einen Media Player in wenigen Minunten im Eigenbau erzeugen. Das Silverlight Media Element bietet dafür die nötige Funktionalität. Aber es geht noch mehr.   Expression Blend 3 enhält als Steuerelement einen kompletten Player. Der Funktionsumfang lässt eigentlich nichts zu wünschen übrig. Um Videos hinzuzufügen wird eine Playlist erzeugt. Im Menüpunkt Items kann dann die Liste der Videos angelegt werden. <ExpressionMediaPlayer:MediaPlayer d:LayoutOverrides="Width, Height"> <ExpressionMediaPlayer:MediaPlayer.Playlist> <ExpressionMediaPlayer:Playlist/> </ExpressionMediaPlayer:MediaPlayer.Playlist> </ExpressionMediaPlayer:MediaPlayer>   Für die einzelnen Filme in der Playlist, kann dann definiert werden: Title, Kapitel oder auch Preview Bilder. Wenn man eine externe Quelle hat, muss man im Context Menü über Custom Expression die URL des Videos eintragen. Nach ausführen der  Silverlight Anwendung mit (F5) startet nach kurzer Zeit der Film. Das Video wird also angezeigt während es noch runtergeladen wird. Das nennt man progressive Download. Der Blend Player zeigt den Status dazu auch unten an. Der graublaue Balken informiert den Benutzer wieviel von den Daten bereits angekommen sind. Der graue Schieberegler zeigt die Abspielposition. Innerhalb des blauen Balkens kann der Benutzer auch repositionieren. Rechts davon aber nicht*. Mit dem Werkzeug HTTPFiddler kann man den laufenden Download auch gut beobachten (hier rechts der Screenshot) Wenn der Webserver es unterstützt kann auch beim Download per GET *repositioniert werden.  IIS7 bietet das dafür nötige HTTP Range Kommando.

eigene Visual States mit Expression Blend 3 erzeugen

In einer Diskussion mit Max Knor  (Evangelist Microsoft Österreich) ging es um Trigger und warum die diese schlecht sind. Der klassische Trigger aus WPF oder Silverlight 2 existieren in Silverlight 3 so nicht mehr. Ich hab da auch ne Flasche Sekt dafür aufgemacht. Trotzdem braucht man die Funktion, daß UI auf Benutzeraktivitäten reagieren soll, auf Designer Seite. Der klassische Code Ansatz Storyboard.Begin() reicht nicht. Wer schon mal ein SL 3 Control, wie einen Button, mit Expression Blend in sein Template zerlegt hat, wird den Visual State Manager schon kennen gelernt haben. Mit diesem können nun Statusänderungen definiert werden. Z.B. hat eine Checkbox den Status Check und Unchecked. Im Status Checked muss ein Haken angezeigt werden. (dieser Haken ist ein Path Element mit dem Namen CheckIcon). Der Übergang von Haken auf Haken weg, wird über klassische Animationen direkt im ViewstateManager erledigt. Bei der Checkbox wird einfach die Transparenz verändert. Im folgenden werde ich kurz zeigen, wie man eigene Visual States definiert. Dabei führt kein Weg an einem UserControl vorbei. In diesem erzeuge ich nun ein Rechteck das zwei Stati hat. Rot und Blau. Im Reiter State wird zunächst eine Gruppe angelegt- hier farbewechseln- und dann per Add State ein neuer Status hinzugefügt. Solange der rote Knopf an ist, wird eine Änderung am Rechteck als Animation aufgezeichnet. Ich setze einfach die Background Farbe passend in jeweiligen States auf Rot oder Blau. Um den Effekt mit fliessenden Übergang zu gestalten, aktiviere ich das Icon mit den Wellen ( Fluid Layout) und setze die Default Zeit auf 2 Sekunden. Als nächstes wird dieses UserControl (Reiter Assets) auf eine neue XAML Page gezogen. Im Reiter Assets findet sich ein weiters neues wunderbares Feature von Expression Blend 3, die behaviours. Von dort ziehe ich das GoToStateAction Behavior auf das Control, das eine Änderung des UI Status bewirken soll. Da ich zwei Stati habe, brauche ich auch zwei GoToStateAction, um diese Statusänderung zu steuern. Alles weitere ist schon Kinderspiel. Über den Trigger Dialog (ja ich weis, Trigger gibts doch nicht mehr),  der GotoStateActionkann man festlegen, welches Event, welche Statusänderung auslösen soll. Diese und weitere Tricks lernt man in meine Silverlight Kurs oder Expression Blend Schulungen.

Fehlersuche bei Silverlight Out Of Browser Anwendungen

Ein Teilnehmer meines Silverlight Kurses schreibt. habe in der vergangenen Woche meine Silverlight-Anwendung mit WCF out of browser nutzen wollen und es kommt immer die Fehlermeldung: Der Remoteserver hat einen Fehler zurückgegeben : NotFound Das sagt leider im Zusammenhang mit WCF nicht viel aus. Silverlight interpretiert nahezu jede Exception, egal ob 500er Fehler am Server oder Cross Domain Issue als notFound. Ülicherweise rate ich hier mit HTTPFiddler aufs Kabel zu schauen. Bei Out Of Browser Anwendungen gestaltet sich das schwieriger weil man den Port für den Internet Zugriff nicht einfach umbiegen kann. Aber man kann debuggen! Der Debugger lässt sich auch bei einer Silverlight Anwendung die OOB läuft verwenden. Allerdings muss man manuell den Prozess sllauncher attachen. Um ein wenig Zeit zu gewinnen kann man im Code prüfen ob der Debugger läuft While Debugger.IsAttached = False System.Threading.Thread.Sleep(100) End While Damit verhindert man das die Anwendung schon längst alles abgehandelt hat, bevor der Debugger gestartet wurde.

Silverlight Anwendung wird in Firefox nicht angezeigt

Auf der VSone Website habe ich eine kleine Anwendung eingebaut die die Sprecher anzeigt. Leider war im Firefox davon nichts zu sehen. Im Internet Explorer klappts. Nach einem Tipp von meinem Kollegen Felix auf die Höhe des DIV zu achtren fand ich das Problem im Object Tag. Hier muss Height gesetzt sein sonst sieht man im Mozilla Firefox nichts von der Silverlight Anwendung. <div id="silverlightControlHost"> <object data="http://blog.ppedv.de/file.axd?file=:application/x-silverlight-2," type="application/x-silverlight-2" width="150"> <param name="source" value="ClientBin/SilverlightApplication1.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="Transparent" /> <param name="windowless" value="true" /> Ich bin mir nicht ganz sicher, ob es mit damit zu tun hat das ich das DIV per windowless über den HTML lege.

Visual Studio 2010 und Silverlight

Beim installieren der Beta 2 von Visual Studio 2010 ist bei mir eine Fehlermeldung bezüglich des Silverlight SDKs gekommen. Über einen Blogeintrag von Mike Snow habe ich nun die Lösung gefunden. Trotz dauernder Lektüre von Silverlight relevanten Websites ist mir entgangen das es eine neue Version (GDR) des Silverligth SDK’s gibt. Das Datum ist 31.08 und die Versionsnummer 40818. Nun sollte das SDK eigentlich mit den Silverlight Tools mit installiert werden. Hier gibt es aber nur eine ältere Version. Also habe ich per Menü Programme das Silverlight SDK deinstalliert und die GDR Version installiert. http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=1ea49236-0de7-41b1-81c8-a126ff39975b

Silverlight Paging mit Entity Framework ist irgendwie komisch

Ist steh ja auf qualifizierte Fehlermeldungen wie “Geht nicht”. Aber in diesem Fall lässt sich das Verhalten kaum textuell beschreiben. Was braucht man? Visual Stduio 2008, Silverlight, Datagrid, Datapager, Entity Framework 1.5 ( aus SP1) Datenmodell, .NET Ria Services und DomainDatasource. Und dann noch identische Loadsize und Pagesize Werte. Schon hat man irgendwie komisches Verhalten beim Paging. Kurze XAML Snippets <riaControls:DomainDataSource x:Name="quelle" QueryName="GetSomeQuery" AutoLoad="True" LoadSize="15"> Dann noch der Pager <data:DataPager Source="{Binding Data,ElementName=quelle}" PageSize="15"></data:DataPager> Workaround: in der Domain Service Klasse beim laden der Daten eine Order Bedingung mit angeben. Hier per LINQ erledigt. Die Zeile 7 ist der Zustand vorher. Public Function GetSome() As IQueryable(Of SessionSprecher) Dim qry = From s In Me.Context.SessionSprecher _ Order By s.Titel _ Select s Return qry 'Return Me.Context.SessionSprecher End Function Ich halte das für einen Bug!

Silverlight Tooltip lsst sich nicht binden

Aus der Kategorie Bug kommt heute die Frage nach dem Binden eines Feldes an einen Tooltip und das ganz im Datagrid von Silverlight. Weder Version 2 noch 3 können dies und verursachen seltsame Fehlermeldungen zur Laufzeit. AG_E_PARSER_PROPERTY_NOT_FOUND [Line: 70 Position: 77] Dies liegt daran das XAML Code beim kompilieren nur auf das Schema geprüft wird. Wenn dann ungültige Eigenschaften auftauchen krahct es erst später. Zur verdeutlichung, folgendes geht nicht <data:DataGridTextColumn ToolTipService.ToolTip="{Binding Title}"></data:DataGridTextColumn>   statt dessen muss ein Template verwendet werden <data:DataGridTemplateColumn Header="Titel" SortMemberPath="Titel"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Titel}" <ToolTipService.ToolTip> <ToolTip> <TextBlock TextWrapping="Wrap" Width="300" Text="{Binding beschreibung}"> </TextBlock> </ToolTip> </ToolTipService.ToolTip> </TextBlock> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> Mehr zu solchen Themen wie immer in meinen Kursen