Il presente articolo è stato tradotto automaticamente.

Programmazione integrata

Dispositivi connessi tramite .NET Micro Framework

Colin Miller

Scaricare il codice di esempio

Oggi, vediamo proliferazione di applicazioni che includono periferiche connesse. In realtà il “ Internet di cosa ” (dispositivi connessi tramite Internet) già stimato maggiore di Internet in termini di endpoint e proiettata a crescere a un ordine di grandezza maggiore nei prossimi anni.

Nel prossimo futuro, abbiamo verrà interagisce con le periferiche più intelligente anziché computer riconoscibile. Cercare solo attorno a casa. Le operazioni che possono essere connessi usefully includono le apparecchiature (per gestione energetica, aggiornamenti software e manutenzione);Auto (per il coordinamento di ricarica il nuovo veicolo elettrico con la griglia test automatici e gli aggiornamenti software e manutenzione);il sistema di irrigazione (per la programmazione basata su rapporti meteorologici e gestione dell'acqua);di animali (per determinare posizione e configurare recinzioni invisibile);il termostato (per il controllo remoto);e molto altro ancora.

Questi dispositivi sono connessi a un altro, ai controller smart, al router e per l'area. Cosa significa questo per sviluppatori Microsoft .NET Framework? A destra, gli sviluppatori .NET possono produrre applicazioni per tutte le parti del sistema a cui connettono piccoli dispositivi. E con Micro .NET Framework gli sviluppatori .NET possono sviluppare il diritto di sistema completo per piccoli dispositivi.

Micro .NET Framework è un'implementazione di .NET Framework specificamente destinati a periferiche più piccola possibile con le estensioni per esigenze di programmazione incorporate. Viene eseguito direttamente sull'hardware senza un sistema operativo sottostante in modo da ridurre il footprint. Informazioni generali sono disponibile all'indirizzo microsoft.com/netmf e sito community open source del progetto: netmf.com.

Alcuni mesi fa, ho iniziato una serie di articoli sul blog di .NET Micro Framework (blogs.msdn.com/b/netmfteam ) che descrive il processo di creazione di uno di questi dispositivi di piccole dimensioni, ovvero un computer bicicletta, da zero utilizzando solo .NET Micro Framework, Visual Studio e una quantità minima di prodotti elettronici. Volevo dimostrare come gli sviluppatori di .NET Framework possono creare applicazioni complete in piccoli dispositivi. (Il primo articolo di questa serie è reperibile in: tinyurl.com/2dpy6rx.)  Figura 1 Mostra effettivo del computer. Si è scelto un computer bicicletta perché chiunque è un esperto di dominio quando si tratta di biciclette. L'applicazione include un'interfaccia utente basata su movimento, supporta un numero di indirizzi e sensori problemi quali la gestione dell'alimentazione a batteria.

image: The NETMF Bicycle Computer

Figura 1 del sistema NETMF Bicycle

Il blog descrive implementazione di ogni funzionalità e il codice per il progetto è disponibile su CodePlex all'indirizzo netmfbikecomputer.codeplex.com/ . Tuttavia, è stata salvata la migliore per ultimo, in questo articolo, ho intenzione di connettere il dispositivo a un servizio Web ospitata in Microsoft Windows Azure su Wi-Fi. Ecco lo scenario: aver appena terminato il tragitto e portare la bici del garage. Il computer contiene dati raccolti durante il tragitto: distanza, velocità, velocità, incline, ora e così via. Capovolgere la visualizzazione dati e premere il pulsante Carica. I dati per il tragitto viene caricati nell'area in cui possono essere aggregato con tutte le altre rides e condividere con i tuoi amici.

In questo articolo mi concentrerò su effettua la connessione e caricamento dei dati anziché discutere il modulo del servizio area a cui è possibile connettersi. Estrarre gli esempi bikejournal.com e cyclistats.com per vedere quali sono le possibilità per tenere traccia dei progressi bicycling e contrastino con gli amici. Mi occuperò di quanto sia semplice effettuare tale connessione.

Primo, una piccola sfondo

Il modello di servizi Web è ideale per la connessione di periferiche perché supporta una gamma completa di servizi e periferiche interazioni che non può essere completamente noto al momento della che creazione di un'applicazione. Sul lato del dispositivo, utilizziamo un sottoinsieme dell'infrastruttura del servizio Web completo denominato profilo di dispositivi per Web Services (DPWS), vedere en.wikipedia.org/wiki/Devices_Profile_for_Web_Services per ottenere ulteriori informazioni. DPWS è descritto come Universal Plug and Play (UPNP) per i dispositivi in rete. In .NET Micro Framework DPWS supporta WS-Addressing, rilevamento WS, WS MetaDataExchange e interfacce WS-Eventing e si basa su tecnologie sottostanti di SOAP, XML, HTTP, MTOM e Base64 codifica.

Con DPWS, è possibile connettersi a periferiche client (dispositivi che utilizzano servizi da altri) o server (periferiche che forniscono servizi per altri) o entrambi. È possibile negoziare è fornire e ciò che è possibile utilizzare tramite i metadati e pubblicare e sottoscrivere le notifiche delle modifiche apportate in altre entità. Figura 2 Mostra stack DPWS.

image: The DPWS Stack

Figura 2 l'elenco DPWS

L'implementazione in .NET Micro Framework supporta DPWS versione 1.0, che è compatibile con Windows 7 e DPWS versione 1.1, che è compatibile con Windows Communication Foundation (WCF) 4. È possibile specificare l'associazione che utilizzare per la connessione: ad esempio, SOAP su HTTP (ws2007HttpBinding) o un binding personalizzato che si desidera supportare.

L'applicazione per computer bicicletta è davvero semplice, ci sarà solo essere caricamento dei dati per l'area. DPWS effettivamente possibile creare molte altre. Ad esempio, let’s pronunciare che la mia azienda utilità installa un indicatore smart servizio limita le risorse che è possibile utilizzare in qualsiasi momento specifico. Assieme, si installa un servizio di gestione energetica locale consente di controllare la modalità di utilizzo di tali risorse limitate. È possibile impostare le priorità e sistemi euristici che consentono al sistema di prendere decisioni sulle modalità limitare il consumo, ad esempio, hot acqua di docce ha una priorità alta.

È possibile passare e acquistare una nuova Lavastoviglie. Si porta di casa e collegarlo. In background, il Lavastoviglie rileva la rete locale e “ individua ” al servizio di gestione. Lo segnala come è possibile utilizzare il servizio del consumo di energia nei vari stati e le regole. Successivamente, quando viene eseguito il Lavastoviglie, passare la doccia e Riscaldatore hot acqua, vieni. Tuttavia, dopo l'avvio di Lavastoviglie, non è necessario disattivare semplicemente e avere il cibo rafforzare su lastre. Per tagliare il consumo totale, il servizio di gestione comunica Lavastoviglie da solo rinse le antenne ogni 15 minuti per impedire che asciuga e riprendere in cui è stata interrotta nel ciclo di pulizia quando è eseguita con la doccia. Come si può vedere, questo intero scenario può supportare un insieme arbitrario di endpoint con funzionalità definite in DPWS.

Background sufficiente — Let’s Make It Work

Configurazione radio Wi-Fi è abbastanza semplice. Esistono due modi per eseguire questa operazione, ovvero uno viene utilizzata l'utilità MFDeploy.exe e l'altra è un'interfaccia di programmazione supportata da SDK GHI (da GHI Electronics). Avviare Let’s con MFDeploy.exe, è uno strumento fornito con .NET Micro Framework e reperibile nella sezione Strumenti di installazione di SDK. Nella finestra di destinazione | configurazione | finestra di dialogo configurazione di rete (vedere di Figura 3), è possibile attivare il DHCP, selezionare il meccanismo di protezione e immettere la passphrase e altri aspetti di configurazione della rete domestica.

image: The MFDeploy Network Configuration Dialog

Figura 3 della finestra di dialogo configurazione rete MFDeploy

DHCP occuperà di compilare il campo gateway e DNS delle impostazioni di rete. Queste informazioni sono disponibili all'applicazione gestita tramite il tipo NetworkInterface e Wireless80211 figlio. Lo stack HTTP implicitamente utilizzerà queste informazioni durante l'invio e la ricezione di byte, ma potrebbe essere necessario un ulteriore informazione per attivare tramite un proxy, qualcosa potrebbe richiedere la rete. Per utilizzare correttamente il proxy lo stack HTTP, è consigliabile aggiungere quanto segue a un programma come ulteriore suggerimento da dove collegare:

WebRequest.DefaultWebProxy = 
  new WebProxy("<router IP Adress>");

Se è presente nessun ruolo esplicito proxy nella rete, in genere possibile predefinito utilizzando l'indirizzo del gateway. Con l'interfaccia di programmazione GHI, è possibile utilizzare alcuni derivato del codice mostrato in di Figura 4.

Figura 4 di configurazione Wi-Fi con GHI interfaccia di programmazione

// -- Set up the network connection -- //
WiFi.Enable(SPI.SPI_module.SPI2, (Cpu.Pin)2, (Cpu.Pin)26);
NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();
Wireless80211 WiFiSettings = null;
for (int index = 0; index < networks.Length; ++index)
{
  if (networks[index] is Wireless80211)
  {
    WiFiSettings = (Wireless80211)networks[index];
    Debug.Print("Found network: " + WiFiSettings.Ssid.ToString());
  }
}
WiFiSettings.Ssid = "yourSSID";
WiFiSettings.PassPhrase = "yourPassphrase";
WiFiSettings.Encryption = Wireless80211.EncryptionType.WPA;
Wireless80211.SaveConfiguration(
  new Wireless80211[] { WiFiSettings }, false);
_networkAvailabilityBlocking = new ManualResetEvent(false);
if (!WiFi.IsLinkConnected)
{
  _networkAvailabilityBlocking.Reset();
  while (!_networkAvailabilityBlocking.WaitOne(5000, false))
 {
    if (!WiFi.IsLinkConnected)
    {
      Debug.Print("Waiting for Network");
    }
    else
    break;
  }
}
Debug.Print("Enable DHCP");
try
{
  if (!WiFiSettings.IsDhcpEnabled)
    WiFiSettings.EnableDhcp(); // This function is blocking
  else
  {
    WiFiSettings.RenewDhcpLease(); // This function is blocking
  }
}
catch
{
  Debug.Print("DHCP Failed");
}

Nell'esempio di Figura 4 si presuppone che si sta utilizzando la protezione WPA o WPA2. WEP è inoltre supportato. La prima cosa che si è identificare le righe SPI porta e controllo utilizzate per la radio. Questa configurazione rappresenta le connessioni per l'hardware, una scheda FEZ Cobra da GHI. Tutto ciò che ha richiesto è impostato il WiFiSettings, salvare la configurazione e chiamare EnableDHCP. Si noti che alcune di queste chiamate di blocco e ciò può richiedere molto tempo, sarà necessario assicurarsi che l'utente sappia cosa sta succedendo. Inoltre, non è possibile in questa interfaccia di programmazione per enumerare le reti disponibili è possibile selezionare da essi. Hardcoded le informazioni di rete nell'esempio Figura 4.

Per un'implementazione esterna del computer bicicletta, è necessario scrivere una configurazione Wi-Fi integrata UI espone le informazioni immesse nella finestra di dialogo illustrata in di Figura 3 e una tastiera su schermo per inserirlo. Se si dispone di ora scrivere questo in un altro articolo di blog prima della pubblicazione di questo articolo. Lavora in un articolo di servizio ora viene illustrato come utilizzare la connessione Wi-Fi per ottenere la data e ora quando avvia il computer in modo che non è necessario mantenere la periferica in esecuzione per gestire tali informazioni o che l'utente (me) immetterlo all'avvio.

Impostazione della connessione del servizio

Tutto ciò che resta l'implementazione DPWS. Come promemoria, utilizzerò lo stato attivo sul lato periferica. Il servizio Windows Azure che sto utilizzando fornisce un modello semplice “ Hello World ”. Inizia con questo ed estende il contratto aggiungendo i campi che si desidero archiviare e le operazioni scrivendo le operazioni di caricamento e GET. Consente di creare un servizio che può accettare i dati, memorizzare e mi nuovamente gli ultimi dati memorizzati. Ovviamente, un servizio completo richiede molto lavoro, ma è un altro articolo. Let’s esaminare brevemente il contratto creato per questo servizio. Il ServiceContract contiene due operazioni e il DataContract contiene campi (vedere di Figura 5).

Figura 5 di contratti di assistenza

[ServiceContract]
  public interface IBikeComputerService
  {
    [OperationContract]
    BikeComputerData GetLastComputerData();
    [OperationContract]
    void UploadBikeComputerData(BikeComputerData rideData);
  }
  // Use a data contract as illustrated in the sample below 
  // to add composite types to service operations.
  [DataContract]
  public class BikeComputerData
  {
    DateTime _Date;
    TimeSpan _StartTime;
    TimeSpan _TotalTime;
    TimeSpan _RidingTime;
    float    _Distance;
    float    _AverageSpeed;
    float    _AverageCadence;
    float    _AverageIncline;
    float    _AverageTemperature;
    bool     _TempIsCelcius;
            
    [DataMember]
    public DateTime Date…
    [DataMember]
    public TimeSpan StartTime…
    [DataMember]
    public TimeSpan TotalTime…
    [DataMember]
    public TimeSpan RidingTime…
    [DataMember]
    public float Distance…
    [DataMember]
    public float AverageSpeed…
    [DataMember]
    public float AverageCadence…
    [DataMember]
    public float AverageIncline…
    [DataMember]
    public float AverageTemperature…
    [DataMember]
    public bool TemperatureIsInCelcius…
  }

L'effettiva implementazione del contratto è minimo per supportare computer esempio bicicletta (vedere di Figura 6).

Figura 6 di implementazione il contratto

public class BikeComputerService : IBikeComputerService
{
  static BikeComputerData _lastData = null;
  public BikeComputerData GetLastComputerData()
  {
    if (_lastData != null)
    {
      return _lastData;
    }
    return new BikeComputerData();
  }
  public void UploadBikeComputerData(BikeComputerData rideData)
  {
    _lastData = rideData;
  }
}

Il file WSDL definisce il servizio

Dal contratto e lo schema è stato creato, il servizio Windows Azure auto-genera un file WSDL (Web Service Definition Language).Contiene la definizione di SML (Service Modeling Language) del servizio.La specifica W3C per il documento WSDL, visitare w3.org/TR/wsdl .Definisce le operazioni e i messaggi che supporta il servizio.Il file WSDL viene memorizzato come una descrizione XML in un sito Web, dove è accessibile a tutti gli utenti si connettono al servizio.Re è reperibile in netmfbikecomputerservice.cloudapp.net/BikeComputerService.svc?wsdl.Figura 7 Visualizza un'istantanea piccola del file WSDL è simile, ma è importante ricordare che questo file viene generato automaticamente e viene utilizzato solo da altri programmi.Non è necessario scrivere mai questo XML touchy e complessi.


image: The WSDL File

Fai clic sull'immagine per ingrandirla

Figura 7 del file WSDL

È possibile verificare che il file WSDL contiene le definizioni di messaggi di dati di input e output e le operazioni di recupero e caricamento dei dati.Ora che abbiamo nostra semplice interfaccia di servizio definiti e pubblicati, come è possibile programmare che?Che è piuttosto semplice.

Generazione di codice con MFSvcUtil.exe

Sul desktop, è un'utilità denominata ServiceModel MetadataUtility Tool (SvcUtil.exe) che può generare il codice del modello di servizio dai documenti dei metadati (ad esempio il WSDL) e viceversa.Micro .NET Framework è un'utilità analoga chiamata MFSvcUtil.exe.Si tratta di uno strumento della riga di comando che è meglio eseguire nella directory del progetto.In questo modo, viene eseguito facendo riferimento alla specifica WSDL pubblicata:

<SDK_TOOLS_PATH>\MFSvcUtil.exe http://netmfbikecomputerservice.cloudapp.net/BikeComputerService.svc?wsdl

Lo strumento genera tre file (vedere di Figura 8).


image: Executing the MFSvcUtil.exe Command

Fai clic sull'immagine per ingrandirla

Figura 8 Esecuzione comando MFSvcUtil.exe

Il file BikeComputerService.cs contiene la definizione di dati nei messaggi, le classi che definiscono le operazioni supportate dal servizio, poiché la periferica è un client e un numero di funzioni di supporto per la serializzazione e de-serializing dati (vedere di Figura 9).

Figura 9 Il File BikeComputerService.cs

namespace BikeComputer.org
{
  [DataContract(Namespace="http://tempuri.org/")]
  public class GetLastComputerData ...
    
  public class GetLastComputerDataDataContractSerializer : DataContractSerializer…
    
  [DataContract(Namespace="http://tempuri.org/")]
  public class GetLastComputerDataResponse ...
    
  public class GetLastComputerDataResponseDataContractSerializer : DataContractSerializer…
    
  [DataContract(Namespace="http://tempuri.org/")]
  public class UploadBikeComputerData ...
    
  public class UploadBikeComputerDataDataContractSerializer : DataContractSerializer…
    
  [ServiceContract(Namespace="http://tempuri.org/")]
  [PolicyAssertion(Namespace="https://schemas.xmlsoap.org/ws/2004/09/policy",
    Name="ExactlyOne",
    PolicyID="WSHttpBinding_IBikeComputerService_policy")]
  public interface IIBikeComputerService ...
}
namespace schemas.datacontract.org.BikeComputerServiceWebRole...

Il file BikeComputerClientProxy.cs contiene le interfacce proxy del servizio Web:

namespace BikeComputer.org
{
  public class IBikeComputerServiceClientProxy : DpwsClient
  {
    private IRequestChannel m_requestChannel = null;
        
    public IBikeComputerServiceClientProxy(Binding binding,    
      ProtocolVersion version) : base(binding, version)...
        
    public virtual GetLastComputerDataResponse 
      GetLastComputerData(GetLastComputerData req) ...
        
    public virtual UploadBikeComputerDataResponse  
      UploadBikeComputerData(UploadBikeComputerData req) ...        
  }
}

Il terzo file MFSvcUtil.exe creato è il file BikeComputerServiceHostedService.cs;Questo file contiene la logica di interfaccia viene eseguita sul lato del servizio dell'interfaccia. Nel nostro caso, WSDL generato dai contratti di servizio e dati che sono stati creati, questo file è “ throw stoccaggio ” per noi. Viene generato per coprire scenari in cui si ottiene un WSDL pubblicato e si desidera replicare un servizio da esso o in cui si desidera eseguire un servizio su un altro dispositivo. Tenere presente che possono essere periferiche client, server o entrambi. L'opzione per fornire servizi di altre periferiche periferiche consente alcune interessanti applicazioni. Si tratta di BikeComputerServiceHostedService contiene:

namespace BikeComputer.org
{
  public class IBikeComputerServiceClientProxy : DpwsHostedService
  {
    private IIBikeComputerService m_service;
        
    public IBikeComputerService(IIBikeComputerService service, 
      ProtocolVersion version) : base(version) ...
    public IBikeComputerService(IIBikeComputerService service) :
      this(service, new ProtocolVersion10())...
    public virtual WsMessage GetLastComputerData(WsMessage request) ...
    public virtual WSMessage UploadBikeComputerData(WsMessage request) ...
  }
}

Caricamento dei dati

Come si è visto, tutto il codice di applicazione dispositivo finora è stato generato automaticamente da WSDL. Il codice che effettivamente avete scrivere sul client per connettersi al servizio e la registrazione dei dati e la lettura nuovamente solo per verificare che sia stata ricevuta? Sono necessarie solo poche righe di codice. Ecco cosa ha in progetto di computer bicicletta.

Nella classe RideDataModel aggiunto al costruttore per impostare la connessione DPWS seguenti:

public RideDataModel()
{
  _currentRideData = new CurrentRideData();
  _summaryRideData = new SummaryRideData();
  _today = DateTime.Now; //change this to the time service later.
  //--Setup the Web Service Connection
  WS2007HttpBinding binding = new WS2007HttpBinding(
    new HttpTransportBindingConfig(new Uri
      ("http://netmfbikecomputerservice.cloudapp.net/BikeComputerService.svc")
     ));
  m_proxy = new
    IBikeComputerServiceClientProxy(
    binding, new ProtocolVersion11());    
  _upload = new 
    UploadBikeComputerData();
  _upload.rideData = new
    schemas.datacontract.org. 
    BikeComputerServiceWebRole.
    BikeComputerData();
  }

Successivamente, ho creato un metodo nella classe per caricare i dati al servizio Web. Questa routine inserisce i dati di riepilogo da corsa nei campi dello schema del servizio Web a cui fa riferimento il file WSDL e riportate nel BikeComputerService.cs, progettato per associare i dati. Quindi è possibile richiamare il metodo UploadBikeComputerData del proxy con i dati di caricamento e recuperare la data del tragitto l'ultimo nel servizio Web per la convalida di dati è stati ricevuti (vedere di Figura 10).

Figura 10 caricamento dati al servizio Web

public bool postDataToWS()
{
  //-- Load the ride summary data into the upload fields --//
  _upload.rideData.AverageCadence = _summaryRideData.averageCadence;
  _upload.rideData.AverageIncline = _summaryRideData.averageIncline;
  _upload.rideData.AverageSpeed = _summaryRideData.averageSpeed;
  _upload.rideData.AverageTemperature = 
    _summaryRideData.averageTemperature;
  _upload.rideData.Date = _summaryRideData.rideDate;
  _upload.rideData.Distance = _summaryRideData.distance;
  _upload.rideData.RidingTime = _summaryRideData.ridingTime;
  _upload.rideData.StartTime = _summaryRideData.startTime;
  //-- Upload the data --//
  m_proxy.UploadBikeComputerData(_upload);
  //-- Validate the upload by retrieving the data and comparing --//
  GetLastComputerData req = new GetLastComputerData();
  GetLastComputerDataResponse back = m_proxy.GetLastComputerData(req);
  if (back.GetLastComputerDataResult.Date == _upload.rideData.Date)
  {
    return false;
  }
  return true;
}

Si presume che accettano solo una corsa giorno, se si hanno più rides, è necessario modificare tale logica di confronto. Per utilizzare la funzionalità “ pausa ” sul computer bicicletta e considerare tutti rides in un giorno come un set di dati previsti. Ho già la possibilità di memorizzare i dati in un file in una scheda SD sulla bici come descritto in un articolo precedente nel blog. Aggiungerò la possibilità di tenere traccia di quali set di dati di corsa sono state registrate per il servizio Web e registrare qualsiasi che mancano. Ciò consente di essere fuori dei limiti di connessione wireless per qualche tempo ed essere comunque in grado di aggiornare il servizio Web in un secondo momento. Un altro miglioramento consiste nell'attivare la connessione a un computer come intermediario quando la rete non è disponibile.

Pertanto, 17 righe di codice che ho scritto nell'applicazione (la maggior parte di tale mapping dei dati di riepilogo nei campi schema servizio) e caricamento dei dati a un servizio che esegue controlli di validità. Niente male.

Ora fine nostri interscambio è connesso

Alla fine di una corsa, mentre entrano mio garage, è possibile passare alla schermata di salvataggio dei dati con un semplice gesto e registrare i dati per l'area.

È comunque alcune operazioni da eseguire a tal fine per rendere i dati più utili, ma che è un'altra storia.

Periferiche incorporate sono state Isole di tecnologia specializzato in cui semplicità di programmazione e flessibilità sono state scambiate disattivare requisiti small footprint/a basso costo e ad alte prestazioni. Più spesso ci stiamo visualizzazione piccole periferiche connesse ad altre periferiche e reti per creare soluzioni all'avanguardia. Allo stesso tempo, il prezzo di processori e memoria continua a spostarsi verso il basso fino al punto in cui non occorre abbandonare la produttività dei linguaggi e strumenti desktop per dispositivi ricca e prezzo competitivo. Il risultato è che i programmatori .NET trovano con le competenze e le opportunità per piccoli dispositivi.

Il modello di servizi Web fornisce un'opzione avanzata per la connessione di questi dispositivi di piccole dimensioni poiché l'individuazione di servizi remoti, la sottoscrizione agli eventi remoti e lo scambio di informazioni sui servizi di metadati consente la connessione flessibile di un numero di periferiche. Il costo è che la connessione, tramite SOAP e XML, ovvero è dettagliato, pertanto potrebbe non essere appropriato in tutti i casi.

Il progetto di computer bicicletta dimostra che le competenze di programmazione .NET Framework consentono di scrivere accattivanti interfacce utente per dispositivi di piccole dimensioni, scrivere driver per una varietà di sensori e connettere le periferiche con l'area. Come è illustrato, il lavoro implica la definizione del servizio Web e la maggior parte del codice che viene eseguito sul dispositivo viene generato automaticamente da MFSvcUtil.exe. Poche righe di codice aggiuntivo erano necessarie per caricare i dati. Altre applicazioni potrebbero richiedere sondaggio per il servizio Web (WS_Discovery) o sottoscrivere eventi su altri endpoint (WS_Eventing) o Gestione periferiche e servizi di diverse funzionalità (WS_MetaDataExchange). Tutti questi possono essere aggiunti al modello di scambio di dati di base, se necessario.

Come friend del mio una volta impostata come commento, i programmatori .NET Framework possono ora aggiungere “ Embedded programmatore ” i biglietti da visita. Ci piacerebbe per informazioni sui dispositivi creati con .NET su discussioni in di netmf.com, in cui è possibile rispondere anche eventuali domande su questo articolo o nel sito di blog.

Corsa felice!

Colin Miller avviato il suo sia con calcolo scientifico programmatore, creazione di sistemi di controllo sperimentale 8 e 16 bit. Egli strayed da piccoli dispositivi per 25 anni, compresi 15 presso Microsoft, software PC, inclusi database, desktop publishing, prodotti consumer, Word, Internet Explorer, Passport (LiveID) e servizi in linea. Come gestore delle unità di prodotto di Micro .NET infine (e Fortunatamente) lavora in grado di unire le diverse parti della propria carriera.

Grazie ai seguenti esperti tecnici per la revisione di questo articolo: Maria Lawrence e di Patrick Butler Monterde