BlogServiceHost.Create()

WCF & Azure - Il blog di Fabio Cozzolino

Recent Posts

Tags

My

Twitter

Community

Archives

Email Notifications

Social Bar Widget

[WCF #01] Come non iniziare dall'ABC ??

L'avrete sentito centinaia di volte...no?? Allora ci provo io ...

Alla base dell'architettura di Windows Communication Foundation c'è l'ABC:

  • Address
  • Binding
  • Contract

In sostanza un endpoint di un servizio è costituito dall'insieme di questi tre elementi. L'address indica come poter raggiungere il servizio (dove). Il binding indica la modalità con cui un consumer deve comunicare con il servizio (come). Il contract, infine, definisce quello che il servizio può fare (cosa). Se diamo un'occhiata al file di configurazione di un servizio WCF troveremo tutti e tre gli elementi:

 

<system.serviceModel>
<services>
<service name="MyService">
<endpoint address="http://localhost/MyService/MyService.svc"
binding
="basicHttpBinding"
contract
="IMyService" />
</service>
</services>
</system.serviceModel>

Tradotto in codice un contratto altro non è che una interfaccia, come vediamo dall'interfaccia IMyService:

 

[ServiceContract()]
public interface IMyService
{
[OperationContract]
string GetMyName();
}

L'uso degli attributi ServiceContract e OperationContract servono per dichiarare un contratto di servizio WCF. L'implementazione di questa interfaccia è poi il codice che realmente servirà le richieste verso quel determinato endpoint. Esempio:

 

public class MyService : IMyService
{
public string GetMyName()
{
return "Fabio";
}
}

---

Che mondo sarebbe senza comunicazione ...

Posted: Feb 03 2007, 02:36 PM by Fabio.Cozzolino | with 6 comment(s)
Filed under:

Comments

Crad said:

Ciao Fabio, una domanda: è indispensabile marcare con attributi l'interfaccia del servizio? Perché non è una cosa che mi piaccia granché, dato che in questo modo è fortemente accoppiata a WCF. Preferirei di gran lunga un sistema meno invasivo per definire il contract, ad esempio un file XML, che non "sporchi" il mio assembly.

# February 5, 2007 10:05 AM

Fabio.Cozzolino said:

Ciao Marco. In parte la tua osservazione non è errata. Ma se la contestualizziamo nel mondo SOA è incorretta. Un contratto è un contratto ed in quanto tale non può (non dovrebbe) essere modificato, al massimo versionato. Quando parliamo di interfaccia di servizio (contratto) stiamo facendo un'affermazione forte che ci porta a definire il modo in cui applicazioni esterne comunicano con noi. Questo, per forza di cose, dovrebbe non variare nel tempo (Tenet #2 di SOA: "Services Are Autonomous - Services are entities that are independently deployed, versioned, and managed")

L'interfaccia che noi creiamo rappresenta nel codice, in linea generale, quello che poi è il WSDL.

Quindi si. Allo stato attuale è indispensabile marcare l'interfaccia. Se non lo facciamo, una bella eccezione a runtime ci avviserà della mancanza del contratto per quella implementazione.

# February 5, 2007 2:42 PM

Crad said:

Beh, sta di fatto che contaminare la logica del servizio con quello che a tutti gli effetti è un mero protocollo di trasporto, Tenet o non Tenet, non è bello. Se domani decido di usare un'altra tecnologia, magari solo per quel particolare contesto di deploy, perché devo essere costretto a ricompilare la mia applicazione o a portarmi comunque dietro la reference a WCF?

# February 5, 2007 5:59 PM

Fabio.Cozzolino said:

Spetta ... WCF mira proprio a separare la logica del servizio dal protocollo di trasporto. Questo compito è rilasciato infatti al binding, che è differente rispetto al contract. E' nel binding che indico il protocollo di trasporto utilizzato dal servizio e lo posso fare nel file di configurazione, separandolo quindi dalla sua reale implementazione, come mostrato nel post Wink.

Non ho ben capito cosa intendi per "usare un'altra tecnologia". Se usi WCF hai bisogno della reference ai suoi assembly. Se invece hai lavorato bene, ti sei prima costruito, e poi implementato, il WSDL (contract-first), il servizio basato sulla nuova tecnologia non dovrà far altro che rispettare quel WSDL. Ma, ripeto, probabilmente non ho capito la domanda Smile ...

# February 5, 2007 6:42 PM

Weblog di Fabio Cozzolino said:

Windows Communication Foundation utilizza di default un nuovo serializer appositamente introdotto con

# February 6, 2007 12:18 AM

BlogServiceHost.Create() said:

Introduzione Ormai diverse settimane fa abbiamo parlato di cosa è REST. Oggi vediamo come sviluppare

# March 4, 2009 3:29 PM