E 'davvero tutto a che fare con una Service Oriented Architecture - qualcosa che è stato comune per un po' ed è molto popolare.
L'idea è che operazioni distinte sono separate l'una dall'altra in modo che possano essere riutilizzate e modificate senza ricompilare le app che la utilizzano. Piuttosto che un pezzo di codice in una DLL che viene modificato e copiato ovunque, è possibile implementare un servizio che rappresenta un singolo punto di accesso per un particolare pezzo di elaborazione o fonte di informazioni.
Supponiamo che tu abbia un componente di convalida della carta di credito. Puoi scrivere questo codice e compilarlo in una DLL e iniziare a includerlo in tutte le tue applicazioni. Niente di male in questo, a meno che non si noti un bug o le regole per la modifica della validazione CC. O forse vuoi aggiornarlo per controllarlo contro una lista nera. Non puoi fare nessuna di quelle cose senza dover ricompilare le app che la usano.
Se la convalida della carta di credito viene tuttavia esposta come servizio, è possibile apportare le modifiche e distribuire in un'unica posizione. A condizione che la firma sia la stessa (stessi parametri e risposta), le applicazioni non devono nemmeno sapere che è stata cambiata.
Un altro vantaggio dell'utilizzo di servizi su componenti è che i servizi possono essere ospitati ovunque. Possono essere sul server locale o dall'altra parte del mondo.
Detto questo, come tutto ciò che si dovrebbe decidere l'architettura caso per caso. Mentre la convalida della carta di credito era un buon esempio di quando un servizio è utile, fornire un servizio per il rendering dei controlli HTML non ha molto senso.
Bene, nel caso di Silverlight, l'interfaccia utente/l'app vengono eseguite sul computer client all'interno o all'esterno del browser, mentre la logica aziendale si trova su un server remoto. Non si può davvero ottenere questo risultato usando componenti click-together - i servizi (attraversando i confini della macchina) sono davvero l'unico modo per andare qui. –