Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Creare e consumare servizi WCF con Visual Studio 2008 Express Edition - seconda parte

Nel precedente post abbiamo visto come utilizzare le edizioni Express di Microsoft Visual Studio 2008 per creare e consumare servizi Windows Communication Foundation, in particolare Visual Web Developer 2008 per la prima operazione e Visual Basic 2008 per la seconda, osservando come VWD faccia tutto il lavoro “sporco” nella pubblicazione del servizio su Internet Information Services.

In questo post, invece, vogliamo utilizzare esclusivamente Visual Basic 2008 Express, ricostruendo il progetto da zero. Dopo aver quindi avviato l’ambiente di sviluppo, la prima cosa da fare è creare un progetto di tipo Class Library che chiameremo WcfExpressTemplate.

Una volta pronto, al progetto vanno aggiunti due riferimenti, uno all’assembly System.ServiceModel.dll (che espone WCF) e System.Runtime.Serialization.dll. Fatto questo, dobbiamo scrivere il contract, l’interfaccia che contraddistingue il servizio. Possiamo anche riutilizzare il file di codice creato la volta scorsa con VWD, oppure aggiungere un nuovo file chiamato IExpressService.vb il cui codice è il seguente:

 

<ServiceContract()> _

Public Interface IExpressService

 

    <OperationContract()> _

    Function ValidateMailAddress(ByVal mailAddress As String) As Boolean

 

End Interface

 

La classe che implementa l’interfaccia è definita in un file chiamato ExpressService.svc.vb (anche qui possiamo riutilizzare il precedente) il cui codice è sempre questo:

 

Public Class ExpressService

    Implements IExpressService

 

    Public Function ValidateMailAddress(ByVal mailAddress As String) As Boolean Implements IExpressService.ValidateMailAddress

        Dim validateMail As String = "^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-z]{2,4}|[0-9]{1,3})(\]?)$"

 

        Return Regex.IsMatch(mailAddress, validateMail)

    End Function

End Class

A corollario di questo file ci dev’essere il file .svc che, col suo markup, identifica il servizio. Per aggiungere un file di questo tipo al progetto, sempre tramite Project|Add new item, dobbiamo sfruttare il modello per file di testo, poichè VB Express non offre il template .svc. Il file si chiamerà, come detto, ExpressService.svc e il suo markup sarà il seguente:

 

<%@ ServiceHost Language="VB" Debug="true" Service="WcfServiceTemplate.ExpressService" CodeBehind="ExpressService.svc.vb" %>

L’ultimo passaggio per la creazione del nostro servizio è l’aggiunta del file di configurazione. Con le modalità viste per l’aggiunta del file .svc, aggiungiamo al progetto un file chiamato Web.config. Il codice di questo file, semplificato rispetto all’applicazione Web creata con VWD, è il seguente:

 

<?xml version="1.0" encoding="utf-8" ?>

 

<configuration>

 

  <system.serviceModel>

    <services>

      <!--Sostituire con la classe che implementa il contract-->

      <service

          name="WcfServiceTemplate.ExpressService"

          behaviorConfiguration="MyServiceBehavior">

        <endpoint address=""

                  binding="wsHttpBinding"

                  contract="WcfServiceTemplate.IExpressService" />

      </service>

    </services>

 

    <behaviors>

      <serviceBehaviors>

        <behavior name="MyServiceBehavior">

          <serviceMetadata httpGetEnabled="true" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

  </system.serviceModel>

</configuration>

 

In sostanza abbiamo specificato solo la sezione ServiceModel, che è quella inerente il servizio WCF. Quelle specifiche delle Web application, infatti, non ci interessano. Compiliamo il servizio, tramite Build|Build..., verificando che non ci siano stati errori. Il nostro progetto è venuto così bene che vogliamo farne un modello di progetto per WCF da poter riutilizzare ogni volta in Visual Basic 2008 Express, quindi decidiamo di esportarlo come modello. Dal menu File, selezioniamo il comando Export template. Le due seguenti figure mostrano le due fasi del Wizard per l’esportazione, evidenziando la tipologia di modello (project template) e i vari identificatori da assegnare.

 

 

 

 

Non ci credete? J Provate a creare un nuovo progetto e vedrete comparire il template tra i modelli disponibili:

 

 

Ora viene la parte più complessa, la pubblicazione in Internet Information Services. Ci serve una cartella d’appoggio, nel mio pc ne ho creata una chiamata C:\Temporary\ExpressSvc. Nella cartella ExpressSvc citata devono essere copiati i file Web.config e ExpressService.svc. All’interno della cartella, poi, deve essere creata una ulteriore sottocartella chiamata Bin, all’interno della quale deve essere copiato il file WcfExpressTemplate.dll, ossia il servizio in forma compilata.

 

Fatto questo, avviate Gestione Internet Information Services dagli strumenti amministrativi di Windows. Espandete la struttura ad albero fino a visualizzare il sito Web predefinito, fate clic destro e selezionate il comando Aggiungi applicazione, come in figura:

 

 

 

Nella finestra successiva, specifichiamo il percorso dove abbiamo pubblicato manualmente il servizio assegnando un Alias, come in figura:

 

 

 

Facendo la verifica della pubblicazione, digitando l’URL del servizio nella barra degli indirizzi, il browser si presenta così:

 

 

 

Ciò significa che tutto funziona a dovere. Ora possiamo referenziare il nostro servizio da una qualsivoglia applicazione .NET. La seguente figura mostra la finestra di aggiunta di un Service Reference al nostro servizio, evidenziando che i metadati vengono riconosciuti a dovere:

 

 

 

And that’s it! J Una serie di operazioni forse lunga, ma spero che sia stata utile per chiarire i dubbi inerenti la problematica della creazione e dell’utilizzo dei servizi WCF con Visual Studio 2008 Express Edition.

 

Alessandro

Print | posted on mercoledì 31 dicembre 2008 02:00 | Filed Under [ Visual Basic Visual Studio Express Editions Windows Communication Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET