Se avete problemi ad aggiungere una Service Reference nei vostri progetti Windows Phone, leggete qui…

Print Content | More

Vi avevo già parlato in passato di questo fastidioso bug, che fa sì che il tentativo di aggiungere una Service Reference (ovvero una reference per poter utilizzare un servizio WCF, ad esempio, all’interno della vostra applicazione) ad un progetto Windows Phone porti ad un fallimento: apparentemente, il servizio viene aggiunto correttamente; se però si va ad analizzare la classe proxy generata dal tool SvcUtil (chiamata Reference.cs) si troverà una classe vuota.

Finalmente, grazie ad un utente su Twitter, sono riuscito a capire dove stia il problema: il punto utilizzato all’interno del nome del nostro progetto (ad esempio, PushNotification.Service). A quanto pare, per un bug di Visual Studio (legato specificatamente ai progetti Windows Phone, dato che con un progetto Web, WPF o Silverlight non succede) l’utilizzo di questo carattere crea problemi in fase di generazione della classe proxy, con i risultati che tutti sappiamo.

Il bug è abbastanza fastidioso per il sottoscritto, dato che tipicamente uso proprio il punto per identificare i progetti che fanno parte della stessa soluzione (ad esempio, PushNotifications.Service, PushNotifications.Client e così via). Putroppo al momento l’unica soluzione per aggirarlo (oltrea a quella ovvia di non utilizzare il punto nei nomi di progetto) è creare un nuovo progetto Windows Phone con un nome “corretto”, importare il servizio, dopodichè copiare i vari file generati da Visual Studio nell’altro progetto “reale” dove dovete utilizzare il servizio.

Vediamo brevemente come fare:

  • Aggiungete una reference al servizio nel vostro progetto reale: cliccate con il tasto destro sul progetto, selezionate Add Service Reference, date un nome al servizio e conferma.
  • Ora create il progetto “di appoggio” e importate lo stesso servizio, facendo attenzionare a dargli lo stesso nome che avete utilizzato nel progetto reale.
  • Aprite entrambe le cartelle dei vostri progetti: quello reale e quello finto. In entrambe troverete una cartella chiamata Service Reference, con all’interno una sottocartella con lo stesso nome che avete dato al servizio. Copiatela dal progetto di appoggio a quella del progetto reale, sovrascrivendo tutti i file.
  • Ora portatevi nella root del progetto di appoggio e copiate questa volta nel progetto reale il file ServiceReferences.ClientConfig (sempre sovrascrivendo quello già esistente), che contiene la configurazione del binding utilizzato per collegarsi al servizio WCF.
  • Ora chiudete pure il progetto di appoggio e tornate a quello reale: in Solution Explorer cliccate sul servizio contenuto nella cartella Service References. Tra i pulsanti in alto a Solution Explorer cliccate sul secondo, etichettato Show all files. In questo modo potrete accedere a tutti i file generati da Visual Studio per permettervi di utilizzare il servizio.
  • Aprite il file Reference.cs (gerarchicamente, vi verrà mostrato come figlio di Reference.svcmap) e cambiate il namespace della classe, in modo che coincida con quello del vostro progetto reale (ora conterrà infatti il namespace del vostro progetto di appoggio).

Salvate e ricompilate: se tutto è andato a buon fine, all’interno della vostra applicazione dovreste essere in grado di istanziare il client del servizio (tipicamente NomeDelServizioClient, ad esempio se il nome che avete dato al servizio è PushService la classe da istanziare si chiamerà PushServiceClient) e di utilizzarne i metodi esposti.


Windows Phone , Service Reference , WCF

0 comments

Related Post


(will not be published)
(es: http://www.mysite.com)