Κλήση WCF Service από windows mobile συσκευή

Σε αυτό το 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

image

Για τις ανάγκες του παρόντος post, θα χρησιμοποιήσουμε τα δύο default operations του service

image

Στη συνέχεια, θα μεταβούμε στο web.config, όπου και θα αλλάξουμε το binding του service μας (που από default είναι wsHttpBinding) σε basicHttpBinding, μιας και το wsHttpBinding δεν υποστηρίζεται στο .NET Compact Framework 3.5 (για πλήρη λίστα των bindings που υποστηρίζονται στο .NET Compact Framework 3.5, δείτε εδώ).

Οπότε, το web.config μας θα μοιάζει κάπως έτσι

image

Στη συνέχεια, θα κάνουμε publish το service μας στον τοπικό IIS (δεν μπορούμε να χρησιμοποιήσουμε τον ενσωματωμένο web server του Visual Studio, καθώς αυτός υποστηρίζει συνδέσεις μόνο από το ίδιο μηχάνημα, οπότε δεν θα δεχόταν συνδέσεις από την windows mobile συσκευή μας).

image

Αφού το κάνουμε publish, μπορούμε εύκολα να δοκιμάσουμε την ορθή λειτουργία του

image

Το 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.

image

Στο σημείο αυτό, θα ξεχάσουμε για λίγο το Visual Studio. Πρώτα απ'όλα, θα πρέπει να βρούμε την IP της συσκευής, στο τοπικό δίκτυο της συσκευής με τον υπολογιστή μας. Πηγαίνουμε start -> Run -> cmd. Εκεί πληκτρολογούμε ipconfig, όπου και βλέπουμε τις IP διευθύνσεις του υπολογιστή μας στα διάφορα δίκτυα στα οποία αυτός είναι συνδεδεμένος

image

Η διεύθυνση του υπολογιστή μας στο δίκτυο υπολογιστή-συσκευής είναι, λοιπόν, η 169.254.2.2. Οπότε, συμπεραίνουμε ότι η συσκευή θα βλέπει το service μας στη διεύθυνση http://169.254.2.2/Service1.svc . Ας το δοκιμάσουμε.

image

Συμπεραίνουμε ότι το κινητό μας έχει επιτυχώς 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

image

Βλέουμε ότι το netcfsvcutil δημιούργησε δύο αρχεία, το Service1.cs και το CFClientBase.cs. Ξαναγυρνάμε πίσω στο Visual Studio όπου και κάνουμε add αυτά τα δύο αρχεία στο smart device project που δημιουργήσαμε προηγουμένως

image

Το smart device project μας, όμως, αυτή τη στιγμή δεν κάνει compile, γιατί του λείπουνε δύο απαραίτητα assemblies, και πιο συγκεκριμένα, το System.ServiceModel.dll και το System.Runtime.Serialization.dll(απαραίτητα για να παίξει σωστά το WCF). Μπορούμε πολύ εύκολα να τα κάνουμε reference στο project μας, κάνοντας δεξί κλικ στο project, και επιλέγοντας "Add Reference".

image

Εν συνεχεία, πάμε στη main φόρμα του smart device project μας (by default ονομάζεται Form1.cs) και κάνουμε add τα εξής

  • ένα Button
  • ένα Label
  • ένα TextBox

για τις ανάγκες του demo, θα χρησιμοποιήσουμε το operation GetData του service, το οποίο παίρνει σαν παράμετρο έναν ακέραιο και επιστρέφει ένα string. Οπότε, κάνουμε διπλό κλικ στο κουμπί που προσθέσαμε (για να δημιουργηθεί ο event handler για το Click event) και γράφουμε τα εξής

image

Πάμε τώρα να δοκιμάσουμε την εφαρμογή μας! Επιλέγουμε startup project να είναι το SmartDeviceProject1, και ξεκινάμε το debug. Αρχικά, μας ρωτάει που θέλουμε να γίνει το deployment.

image

Επιλέγουμε Windows Mobile 6 Professional Device. Το visual studio θα αρχίσει να κάνει publish την εφαρμογή μας στη συσκευή, στην οθόνη της οποίας θα εμφανιστούν διάφορα μηνύματα που θα απαιτούν επιβεβαίωση. Μόλις δώσουμε την έγκριση μας για αυτά, στην συσκευή μας θα εμφανιστεί η φόρμα Form1.

image

Το μόνο που απομένει να κάνουμε, είναι να δώσουμε έναν ακέραιο στο textbox (μόνο ακέραιο, γιατί δεν έχουμε γράψει κάποιο validation/exception handling κώδικα) και να πατήσουμε το κουμπί button1.

Αν όλα πάνε καλά, τότε θα εμφανιστεί στο κινητό μας το παρακάτω

image

το οποίο σημαίνει ότι το πρόγραμμα στη συσκευή μας κατάφερε επιτυχώς να καλέσει το service στον υπολογιστή μας!!!!

Enjoy!!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s