Netzwerkverbindungen in Windows 8

Paradigmenwechsel flutscht ja schon leicht mal über die Lippen. Windows 8 ist aber definitiv einer. Im historischen Abriss war der Wechsel von DOS auf Windows ein harter, der Wechsel von XP auf Vista ein weicher. Windows 7 und Windows 8 sind, auch wenn optisch und funktionell ähnlich ,in vielen ganz anders. Immer dann wenn die Unterschiede erkennbar werden und man dann über die Gründe und Motivationen nachdenkt und das dann sogar noch in Code gießen soll, wird klar, das wir an der Grenze zu etwas ganz neuem stehen. Am Ende steht die Wende, die Developer Wende.

Eine einfache Netzwerkverbindung ist so ein Fall. In .NET egal ob WPF oder Silverlight macht man sich dazu keine Gedanken. Netzwerk ist da oder wenn's schlimm kommt nicht da. In Windows 8 sieht das  etwas differenzierter aus.

image

Es gibt verschiedene Netzwerkverbindungen, Profile genannt. Jedes Profil hat unterschiedliche wechselnde Bandbreiten. Es kann eine Verbindung ins Internet herstellen oder nur ins Intranet. Es kann ein Proxy zum Einsatz kommen und einen Benutzeranmeldung. Die Verbindung kann einen Mobile G3/G4 sein, mit Flatrate, Datenlimit oder pay per Use. Wir können uns in einer Roaming Situation befinden. Das alles kann dauernd wechseln, wahrend ein WCF Call oder Download läuft.

Der Witz ist, Entwickler können das in Ihrem Code berücksichtigen oder auch nicht. Der Benutzer wird es nicht direkt merken. Faktisch bräuchte man eine Angabe der Datensignatur ähnlich des CO2 Ausstoßes eines Autos.

Der folgende VB.NET Code kann nur einen Bruchteil der Windows 8 WinRT Funktionen zeigen die dafür vorgesehen sind.

Ausgangspunkt im Windows.Networking Namensraum ist NetworkInformation. So kann man das aktive Profil auslesen oder eine Liste von allen Profilen. Fuer den Download einer Datei kann man sich dann per Code Logik die dickste Leitung aussuchen.

Dim icp As ConnectionProfile = NetworkInformation.GetInternetConnectionProfile()
Dim allICP = NetworkInformation.GetConnectionProfiles()
For Each i In allICP
       …     i.NetworkAdapter.OutboundMaxBitsPerSecond
Next

 

Wenn man wissen will, wie viel aktuell die Verbindung kostet muss man die Datenmenge und den Preis dafür feststellen.

text2.Text = icp.GetConnectionCost.NetworkCostType

 Dim data = icp.GetLocalUsage(t.Subtract(New TimeSpan(1, 0, 0)), t)
 text1.Text = data.BytesSent

 

Es ist mir nicht gelungen die Datenmenge herauszufinden, die eine einzelne APP  oder die eine andere Anwendung verursacht.

Kommentar schreiben