Σε αυτό το blog post θα δούμε πως μπορούμε να φτιάξουμε ένα απλό WCF service, και να το καλέσουμε από μία συσκευή Windows Mobile, και ταυτόχρονα να το κάνουμε demo μέσω της οθόνης του υπολογιστή μας.
Θα χρειαστούμε τα παρακάτω
- Visual Studio 2008 (.NET Framework 3.5)
- Windows Mobile 6 SDK (το κατεβάζετε από εδώ)
- Power Toys for .NET Compact Framework 3.5 (τα κατεβάζετε από εδώ)
- MyMobiler (δωρεάν πρόγραμμα το οποίο δείχνει την οθόνη της συσκευής στο PC, και επιτρέπει τον έλεγχό της μέσω του PC – το κατεβάζετε από εδώ)
Ας ξεκινήσουμε, ανοίγοντας το Visual Studio. Δημιουργούμε ένα νέο WCF Service Application
Για τις ανάγκες του παρόντος post, θα χρησιμοποιήσουμε τα δύο default operations του service
Στη συνέχεια, θα μεταβούμε στο web.config, όπου και θα αλλάξουμε το binding του service μας (που από default είναι wsHttpBinding) σε basicHttpBinding, μιας και το wsHttpBinding δεν υποστηρίζεται στο .NET Compact Framework 3.5 (για πλήρη λίστα των bindings που υποστηρίζονται στο .NET Compact Framework 3.5, δείτε εδώ).
Οπότε, το web.config μας θα μοιάζει κάπως έτσι
Στη συνέχεια, θα κάνουμε publish το service μας στον τοπικό IIS (δεν μπορούμε να χρησιμοποιήσουμε τον ενσωματωμένο web server του Visual Studio, καθώς αυτός υποστηρίζει συνδέσεις μόνο από το ίδιο μηχάνημα, οπότε δεν θα δεχόταν συνδέσεις από την windows mobile συσκευή μας).
Αφού το κάνουμε publish, μπορούμε εύκολα να δοκιμάσουμε την ορθή λειτουργία του
Το service μας είναι έτοιμο προς "κατανάλωση" από οποιονδήποτε client!!!
Αν δεν έχετε ήδη εγκαταστήσει το MyMobiler, κάντε το. Φυσικά, πρώτα θα πρέπει να ρυθμίσετε τη συσκευή σας για ορθή σύνδεση με τον υπολογιστή. Για χρήστες Windows Vista, η σύνδεση γίνεται μέσω του Windows Mobile Device Center, ενώ για χρήστες XP υπάρχει το ActiveSync. Υποθέτω ότι τα έχετε εγκαταστήσει και ρυθμίσει σωστά!!
Συνεχίζοντας, συνδέουμε την windows mobile συσκευή μας στο PC μας (αν δεν το έχουμε κάνει ήδη). Πάμε προσωρινά πίσω στο Visual Studio solution μας, και δημιουργούμε ένα νέο smart device project για Windows Mobile 6, και πιο συγκεκριμένα ένα Device Application.
Στο σημείο αυτό, θα ξεχάσουμε για λίγο το Visual Studio. Πρώτα απ'όλα, θα πρέπει να βρούμε την IP της συσκευής, στο τοπικό δίκτυο της συσκευής με τον υπολογιστή μας. Πηγαίνουμε start -> Run -> cmd. Εκεί πληκτρολογούμε ipconfig, όπου και βλέπουμε τις IP διευθύνσεις του υπολογιστή μας στα διάφορα δίκτυα στα οποία αυτός είναι συνδεδεμένος
Η διεύθυνση του υπολογιστή μας στο δίκτυο υπολογιστή-συσκευής είναι, λοιπόν, η 169.254.2.2. Οπότε, συμπεραίνουμε ότι η συσκευή θα βλέπει το service μας στη διεύθυνση http://169.254.2.2/Service1.svc . Ας το δοκιμάσουμε.
Συμπεραίνουμε ότι το κινητό μας έχει επιτυχώς HTTP access στο service μας. Ας πάμε τώρα να φτιάξουμε τα απαραίτητα αρχεία για την "κατανάλωση" του WCF service από το κινητό. Με την εγκατάσταση των .NET Framework 3.5 Power Toys, εγκαθίσταται ένα προγραμματάκι, το NetCFSvcUtil. Στο δικό μου μηχάνημα, αυτό βρίσκεται στον κατάλογο C:Program FilesMicrosoft.NETSDKCompactFrameworkv3.5bin. Ανοίγουμε ένα command prompt (tip: στα Vista, μπορείτε εύκολα να τρέξετε command prompt με αρχικό path έναν οποιονδήποτε φάκελο, αν κάνετε δεξί κλικ στο φάκελο, κρατώντας πατημένο το Shift. Τότε στο context menu υπάρχει η επιλογή "Open Command Window Here"). Στην κονσόλα λοιπόν, τρέχουμε την εντολή
netcfsvcutil http://169.254.2.2/Service1.svc
Βλέουμε ότι το netcfsvcutil δημιούργησε δύο αρχεία, το Service1.cs και το CFClientBase.cs. Ξαναγυρνάμε πίσω στο Visual Studio όπου και κάνουμε add αυτά τα δύο αρχεία στο smart device project που δημιουργήσαμε προηγουμένως
Το smart device project μας, όμως, αυτή τη στιγμή δεν κάνει compile, γιατί του λείπουνε δύο απαραίτητα assemblies, και πιο συγκεκριμένα, το System.ServiceModel.dll και το System.Runtime.Serialization.dll(απαραίτητα για να παίξει σωστά το WCF). Μπορούμε πολύ εύκολα να τα κάνουμε reference στο project μας, κάνοντας δεξί κλικ στο project, και επιλέγοντας "Add Reference".
Εν συνεχεία, πάμε στη main φόρμα του smart device project μας (by default ονομάζεται Form1.cs) και κάνουμε add τα εξής
- ένα Button
- ένα Label
- ένα TextBox
για τις ανάγκες του demo, θα χρησιμοποιήσουμε το operation GetData του service, το οποίο παίρνει σαν παράμετρο έναν ακέραιο και επιστρέφει ένα string. Οπότε, κάνουμε διπλό κλικ στο κουμπί που προσθέσαμε (για να δημιουργηθεί ο event handler για το Click event) και γράφουμε τα εξής
Πάμε τώρα να δοκιμάσουμε την εφαρμογή μας! Επιλέγουμε startup project να είναι το SmartDeviceProject1, και ξεκινάμε το debug. Αρχικά, μας ρωτάει που θέλουμε να γίνει το deployment.
Επιλέγουμε Windows Mobile 6 Professional Device. Το visual studio θα αρχίσει να κάνει publish την εφαρμογή μας στη συσκευή, στην οθόνη της οποίας θα εμφανιστούν διάφορα μηνύματα που θα απαιτούν επιβεβαίωση. Μόλις δώσουμε την έγκριση μας για αυτά, στην συσκευή μας θα εμφανιστεί η φόρμα Form1.
Το μόνο που απομένει να κάνουμε, είναι να δώσουμε έναν ακέραιο στο textbox (μόνο ακέραιο, γιατί δεν έχουμε γράψει κάποιο validation/exception handling κώδικα) και να πατήσουμε το κουμπί button1.
Αν όλα πάνε καλά, τότε θα εμφανιστεί στο κινητό μας το παρακάτω
το οποίο σημαίνει ότι το πρόγραμμα στη συσκευή μας κατάφερε επιτυχώς να καλέσει το service στον υπολογιστή μας!!!!
Enjoy!!!