Archiv | Networking & Web RSS for this section

HttpWebRequest und Tombstoning in WP7

Für eine aktuelle App muss ich mit Webservices arbeiten, und es ist schon echt sportlich das Handling mit mehreren Webservice Aufrufen. Aber wo es wirklich schwierig ist, Wenn mitten in der Abfrage auch noch Tombstoning und Application Switching unterstützt wird wird es echt kompliziert. Aber habe einen Lösungsansatz gefunden.

catch (WebException e) { if (e.Status == WebExceptionStatus.RequestCanceled) 
MessageBox.Show("Looks like your request was interrupted by tombstoning"); 
else { using (HttpWebResponse response = (HttpWebResponse)e.Response) 
{ MessageBox.Show("I got an http error of: " + response.StatusCode.ToString()); } } }

Abb.: try catch an wird auf WebException geprüft

Durch diese Fehlerbehandlung ist es möglich die Oberfläche zu informieren was passiert ist.Es sieht einfach aus aber Trick liegt eben im Detail.

Quelle:

HttpWebRequest (WebClient) And Tombstoning in Windows Phone 7
Advertisements

Die Wolke liefert Daten

Für zukünftige Aktivitäten im Business Bereich bietet Microsoft ja SQL Azure auf seiner Cloud Windows Azure an. Seit einer gewissen Zeit arbeite ich mich so ein wenig dort ein. Jetzt habe ich gestern einen Post gefunden wie man die Datenhaltung aufbaut in Verbindung mit WP7.

image

Abb.: Datenhaltung SQL Azure nach WP7

In einer Step für Step Anleitung wird vom Service Contract über den Service hin zur fertigen Anwendung alles ausführlich beschrieben. Der Transfer geht über JSON DTO Service. Es ist wirklich nicht so schwer dieses zuverstehen. Hier noch ein paar Zeilen Code:
using System.Runtime.Serialization;

namespace RESTJSONStudentsData
{
[DataContract]
public class PersonDTO
{
[DataMember]
public string StudentId { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }

}
}

Abb.: Data Contract

Und jetzt nich die WCF Verbindung kurz beschrieben:
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace RESTJSONStudentsData
{
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(UriTemplate=“/Persons“,
RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json]
List<PersonDTO> GetPersons();
}
}

Hier sollte hervorgehoben werden die Json Format Einstellungen. Diese können dann ganz einfach per DataContractJsonSerializer konvertiert werden. So ist es echt einfach geworden.

Quelle:

Data from Cloud on Windows Phone

 

Bing Maps Pushpin Optimierung

Über das Bing Maps Control in WP7 habe ich ja schon einige Posts geschrieben, heute geht es darum ein Clustering Pattern für Mengen von Pins zu erstellen.

Colin Eberhardt von ScottLogic hat in einem Post dieses Problem angegangen und dokumentiert.

Über eine Container Pattern Class wird diese Funktion implementiert.

// <summary> 
/// Clusters the given pins on the supplied map 
/// </summary> 
public PushpinClusterer(Map map, List<Pushpin> pins, DataTemplate clusterTemplate) 
{ _map = map; _pins = pins; ClusterTemplate = clusterTemplate;   _map.ViewChangeEnd += (s, e) => RenderPins(); }     
/// <summary> /// Re-render the pushpins based on the current zoom level /// </summary> 
private void RenderPins() 
{ List<PushpinContainer> pinsToAdd = new List<PushpinContainer>();   
// consider each pin in turn foreach (var pin in _pins) 
{ var newPinContainer = new PushpinContainer(pin, _map.LocationToViewportPoint(pin.Location));
   bool addNewPin = true;   
// determine how close they are to existing pins foreach(var pinContainer in pinsToAdd) 
{ double distance = ComputeDistance(pinContainer.ScreenLocation, newPinContainer.ScreenLocation);   
// if the distance threshold is exceeded, do not add this pin, instead // add it to a cluster 
if (distance < DistanceThreshold) { pinContainer.Merge(newPinContainer); addNewPin = false; break; } }   
if (addNewPin) { pinsToAdd.Add(newPinContainer); } }   
// asynchronously update the map 
_map.Dispatcher.BeginInvoke(() => { _map.Children.Clear(); 
foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map))) 
{ _map.Children.Add(projectedPin.GetElement(ClusterTemplate)); } });   
}   

Abb.: Auszug Quellcode

Falls Ihr solche Problematik auch habt dann sollte der Post auch sehr interessieren.

Quelle:

Pushpin Clustering with the Windows Phone 7 Bing Map control

HTML5 auf WP7 Mango

Mit dem Mango Update kommt nun auch der IE9 mit HTML5 Unterstützung aufs WP7 Handy. Auf Codeplex ist dafür nun eine HTML5 Toolsunterstützung DLL Daenet.WidgetLibrary.dll erschienen. Jetzt ist es ein leichtes bestehenden Webcontent uws. auf WP7 umzustellen, besonders hervorzuheben ist die JQuery Einbindung.

pic2

Mit nur wenigen Zeilen Code ist die Erste Website auf dem Phone.

pic5

In einem Post beschreibt der Entwickler des Tools wie diese Lib arbeitet. In 2 weiterführenden Post wird dieses Wissen vertieft, Quellen siehe unten.

Quellen:

Codeplex
HTML5 for Windows Phone 7.1+ – Episode I : HTML5 Support
HTML5 for Windows Phone 7.1+ – Episode II : Browsing HTML content
 

Mango’s Agenten ein Designansatz

Über die Agents in Mango Update habe ich ja schon berichtet, wie man nur Code gemeinsam benutzen kann, also in der Normalen App und im Agent, zeigt Shawn Wildermuth.

10-15-2011 7-31-44 PM

Der Ansatz ist mir durch WCF schon bekannt aber die Idee fand ich sehr smart. Ich habe auch einen Update Agenten momentan im Einsatz und baue jetzt aber das um wie in diesem Demo. Wieder zeigt sich das man nie auslernen tun.

Quelle:

Confusion Around WP7.1 Periodic Agents

 

Tool des Monats Schnappschuss im Livebetrieb einer APP

Mr. Wilcox hat mal wieder eine Tools Klasse gemacht, für zeitgesteuertes Aufnehmen von Fotos der eigenen APP. Ich erweitere diese noch um eine Webservice Klasse für meine eigenen Apps.

Diese werde ich dann hier anbieten, wenn Mr. Wilcox da nichts gegen hat.

        private DispatcherTimer _dt;
        private double _interval;
        private IsolatedStorageFile _isf;
        private static ScreenShots _instance;
        public static void BeginTakingPictures(double interval = 2.0)
        {
            if (_instance == null)
            {
                _instance = new ScreenShots();
                _instance.Start(interval);
            }
            else if (_instance._dt != null)
            {
                _instance._dt.Start();
            }
        }
Auszug von Sourcecode.
Mit einem weiteren Tool kann man diese Bilder auch auslesen mit den Powertools auf Codeplex.

CaptureTool

Dieses Tool kann dann auf der App die Daten auslesen.
Quellen:
Jeff Wilcox Blog
Codeplex
 

Windows Phone Marketplace Test Kit

Ein neues Toolkit ist für WP7 erschienen. Das Windows Phone Marketplace Test Kit.

Mit diesem Tool können Developer schon vorab ihre Abnahme für den Marketplace testen. Was man auf anderen Mobilen Plattformen schmerzlich vermisst bringt Microsoft jetzt schon herraus. Verfügbar ist es über das Windows Phone SDK. Die Benutzung ist denkbar einfach.

Nach dem installieren des SDK ist es automatisch unter dem Menüpunkt Projekt verfügbar. Es sind folgende 4 Optionen verfügbar:

  • Application Details
  • AP_Con_TestKitAppDetails
  • Automated Tests
  • AP_Con_TestKitAutomatedTests
  • Monitored Tests
  • AP_Con_TestKitMonitoredTests
  • Manual Tests
  • AP_Con_TestKitManualTests

 

Es werden je nach Option die UI, die Zugriffmöglichkeiten der App getestet und ob alles korrekt implemtiert wurde.

Quelle:

MSDN

 

Mango schlägt Alarm,

oder wie kann man als Developer die neuen Alarm Klassen nutzen. In einer neuen App benötige ich diese Funktionen und da ist mir gerade der folgende Post von Shawn Wildermuth Windows Phone 7.1 SDK is Alarming aufgefallen.

alarms

Mit dem Mango Update kann diese API nutzen,

 

 

 

 

Abb: Alarm Demo App

// Alarm Name (unique per app)
var alarmName = Guid.NewGuid().ToString();
// Create the Alarm
var alarm = new Alarm(alarmName)
{
  // When the Alarm should sound
  BeginTime = DateTime.Now.AddMinutes(1),
  // The Message in the Alarm
  Content = "Mango Alarm",
  // Exists on Alarms, but it not used
  //Title = "Not used!",
  // What sound to play for the alarm
  Sound = new Uri("alarm.wav", UriKind.Relative)
};
Die API ist im System.Phone.Scheduler Namespace zuhause und bietet alles was man braucht um Alarm – Funktionalität in einer eigenen App zu nutzen.
Quelle:
Windows Phone 7.1 SDK is Alarming

Live Tiles in WP7 Mango

Was bis jetzt etwas gewöhnungsbedürftig wahr die Tiles von WP7 zu programmieren, geht jetzt mit Mango Update total einfach und bietet neue Möglichkeiten für den Entwickler.

Derik Whittaker, zeigt in seinem Blog wie künftig diese neuen Möglichkeiten anprogrammiert werden können.

public void CreateApplicationTile()
{
    var appTile = ShellTile.ActiveTiles.First();

    if (appTile != null)
    {
        var standardTile = new StandardTileData
        {
            Title = „Live Tile Demo“,
            BackgroundImage = new Uri(„Images/SecondaryTileFrontIcon.jpg“, UriKind.Relative),
            Count = 13,    // any number can go here, leaving this null shows NO number
            BackTitle = „Back Title“,
            //BackBackgroundImage = new Uri(„Images/ApplicationTileIcon.jpg“, UriKind.Relative),
            BackContent = „Live Tile Demo Back Title“
        };

        appTile.Update(standardTile);
    }            
}

imageimage

public void CreateSecondaryTile()
{
    var foundTile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains(„DetailId=123“));

    if (foundTile == null)
    {
        var secondaryTile = new StandardTileData
                                {
                                    BackgroundImage = new Uri(„Images/SecondaryTileFrontIcon.jpg“, UriKind.Relative),
                                    Title = „Secondary Tile“,
                                    Count = null,
                                    BackTitle = „Back of Tile“,
                                    BackContent = „You can put some data here……“,
                                    //BackBackgroundImage = new Uri(„Images/SecondaryTileFrontIcon.jpg“, UriKind.Relative)
                                };

        ShellTile.Create(new Uri(„/Views/DetailsPage.xaml?DetailId=123“, UriKind.Relative), secondaryTile);
    }            
}

 

Quelle :

Working with Live Tiles in WP7 Mango–Creating, Updating and Deleting them

SQL Server CE gibt Gummi… DB Engines Performance Testing

Auch wenn ich kein Freund von Statistiken bin, möchte ich auf einen Post von

Max Paulousky in seinem Blog hinweisen. Er zeigt objektiv im Vergleich wie der MS Sql Server CE 4.0 abschneidet.

Databse structure for performance tests

 

Es wird eine typische Datenbank Tabellenstruktur zur Hand genommen und verschiedene Funktionen getestet:

Windows Phone (Mango) DB Engines Performance Testing Results

Quelle:

Windows Phone (Mango) DB Engines Performance Testing