Costruire Web Service
oggi e domani
Giuseppe Guerrasio
Architect, Microsoft
Ad un punto di svolta
Singola Applicazione
Singola Piattaforma
Sistemi Distribuiti
Piattaforme Integrate
Un modello in evoluzione
Funzionalità logiche ricorrenti
La Strategia: Connected System
Fornire una piattaforma integrata di prodotti e
tecnologie completa ed interoperabile
… che include tool (dev e mgmt), framework,
infrastruttura e piattaforma
…che copra l’intera gamma bisogni (client, device, e
server, workflow,dati, messagging , etc)
…che sia interoperabile by design con le altre
piattaforme
… che abbracci tre principi architetturali chiave
Service Orientation
Claims-Based Security
Model Driven Software
Microsoft Application Platform
Connected Systems
WS-* Architecture
Management Business
Process
Reliability
Transactions
Security
Trust
Secure
Conversation
Reliable
Messaging
Atomic
Transaction
Coordination
Business
Activity
Messaging (SOAP, Addressing, MTOM, Eventing)
XML
HTTP
(WSDL, Policy,
Discovery, MEX)
Security
…
Metadata
Connected
Applications
Applicazioni e
Infrastruttura
Foundation
(XML, XSD, XPath)
TCP
SMTP
…
Transport
Today
Tomorrow
ASP.NET Web Services, WSE
e WCF(Indigo)
Windows Communication
Foundation
(Indigo)
Web Services Enhancements
ASP.NET Web Services
Unified distributed applications framework
Advanced WS-* Implementation
Foundation for Web services and serviceoriented applications
Il Bus :Interoperabilità
Application
Data
Contract
Message
Contract
Service
Contract
Policy and
Binding
Metadata
Behavior
Instance
Behavior
Error
Behavior
Transaction
Behavior
Throttling
Behavior
Activation
Behavior
SOAP Security
Channel
HTTP
Channel
UDP
Channel
SOAP Reliability
Channel
TCP
Channel
X-Proc
Channel
Queue
Channel
WAS
Avalon
*.EXE
NT Service
App
App
App
WSE
BizTalk
Adapter
Altri
Stack
Contracts
Service Runtime
Inspection
Facilities
Concurrency
Behavior
Indigo
Cmd/Control
Facilities
Messaging
Text/XML
Encoder
Binary
Encoder
Activation and Hosting
COM+
Devices
Profile
Infrastructure
and Profiles
Metadata
WS-Secure
Conversation
WS-Business
Activity
Assurances
WS-Metadata
Exchange
WS-Trust
WS-Atomic
Transaction
WS-Federation
Network
WS-Security
WS-Management
WS-Reliable
Messaging
UDDI
WS-Coordination
WS-* Protocols
WS-Policy
Messaging
SOAP
WS-Addressing
MTOM
XML Schema
Foundation
XML Infoset
XML 1.0
WSDL
XML
Namespaces
MIME
SOAP / HTTP
Temi Supporto WS .NET v2.0
Interoperabilità
Produttività
Estendibilità
Bisogno di Oggi: Interoperabilità
Miglioramenti alle caratteristiche di Interoperabilità
con il supporto del Basic Profile 1.1
WS compatibili di default con specifico attributo attivato
Emit Conformance Claim supportato lato client solo > 1.1 sp1
Supporto per SOAP 1.2
Server side controllato via .config
Client side Wsdl.exe supporta entrambi 1.1 per default (wsdl.exe
set /protocol a SOAP12) , SoapProtocolVersion come proprietà nel
proxy
Miglioramenti al supporto per la generazione del servizio a
partire dal contratto (“contract-first”)
wsdl.exe /serverInterface generazione interfaccia da implementare
Verifica a run time della contract integrity
Supporto per l’utilizzo dei Generics
Adesempio:. public List<int> ReturnIntegerList()
Nullable Value Types
Utilizzo di Nullable<T>
Bisogno di Oggi: Produttività
Client più semplici da sviluppare
Nuovo modello asincrono event-based
Utilizza XxxAsync e XxxCompleted event
Evento richiamato sul thread chiamante
Sotituisce BeginXxx, EndXxx mantenuti per
compatibilità
Supporto per il databinding nel proxy
In V2.0 per default nel proxy vengono generate
public property invece di field
Wsdl.exe con /fields switch per comportamento
V1.1
Client-side type sharing
Individua gli schemi equivalenti e genera un unico
CLR type
Bisogno di oggi:Estendibilità
Custom serialization disponibile
IXMLSerializable esposto nativamente
Possibilità di gestire con proprio codice la serializzazione
.NET Framework 2.0 introduce [XmlSchemaProvider]
Usato con IXmlSerializable per indicare i metodi statici
per generare lo schema
Deprecato IXmlSerializable.GetSchema
Custom proxy code generation con
SchemaImporterExtension
Classe astratta che abilita la generazione di custom code
quando si importano schemi nel proxy
Altre Estensioni alla v2.0
Supporto in System.Net per la determinazione dello
stato di rete (online/offline)
detect automatico della modifica del Web Proxy
Supporto automatico della compressione nel Proxy
Disponibile anche client side la compressione oltre che nativamente in
II6, service.EnableDecompression = true;
Costruzione a Design Time dei Serializzatori per i
Proxy
Generazione attraverso tool da riga di comando sgen.exe
Integrazione in VIsual Studio
Semplificazione nell’utilizzo delle Default Credential
service.UseDefaultCredentials = true
WSE è Security
WSE 3.0
Indigo
WSE v3.0 con .NET
Framework v2.0 strada principale verso
WFC ( Indigo)
Semplificare lo sviluppo di
Web Service Sicuri
Semlpificare lo sviluppo
di soluzioni Service Oriented
utilizzando WS-* protocols
e .NET Framework v2.0
WSE 3.0
Applicazione di WS-Security con scenari
attraverso le Policy
Descrivono i requisiti per i messaggi in ingresso ed in
uscita attraverso Policy Assertion
Superano le limitazioni delle Policy in WSE 2.0
Request e Response separati
Complessità , necessita di pensare a basso livello alle singole
funzionalità ed aggregarle
Supporto di tool per Visual Studio 2005
Estensione dell’ ASMX programming model
Trasporti alternativi es. TCP
Hosting environment alternativi es. Console apps
Messaging APIs ancora supportate ma deprecate
SoapClient, SoapService
Message Transmission Optimization Mechanism
(MTOM)
MTOM sostituisce DIME & WS-Attachments
Turnkey Security Scenario
Basati su industry best practice
Ogni scenario rappresenta una assertion
UsernameForCertificate
AnonymousForCertificate
UsernameOverTransport
Kerberos
MutualCertificate
WSE 3.0 Session Management
Stateful SCTs
WSE 2.0 richiede che il servizio mantenga lo
stato del SCT
In WSE 3.0 lo stato può essere mantenuto
con lo stesso SCT
Permette al SCT di ristabilire una sessione
SCT Cancellation
In WSE 2.0 SCT scade a timeout
In WSE 3.0 c’è la possibilità di cancellare
una session
Windows Communication Foundation
(Indigo)
Modello di programmazione unificato per costruire
rapidamenteservice-oriented application per Windows
Unificazione
Unifica le attuali tecnologie MS distribuite in un
modello unico
Appropriato per l’uso on-machine, cross
machine, and cross Internet
Service
Orientation
Implementa le best practices per costruire
applicazioni distribuite basate sui principi della
service orientation
Integrazione
Interoperabile con applicazioni di altre piattaforme
con ampio supporto per WS*-Architecture
Integrabile con gli altri windows distributed stacks
WCF Architettura
Application
…
Error
Behavior
Metadata
Behavior
Instance
Behavior
Throttling
Behavior
Transaction
Behavior
Type Integ.
Behavior
Concurrency
Service Model
Messaging
…
Hosting
Environments
Secure
Channel
…
WAS
HTTP
Channel
ASP.NET
Avalon
Behavior
Text/XML
Encoder
Reliable
Channel
TCP
Channel
WinForm
Queue
Channel
NT Service
Binary
Encoder
COM+
Client e Service
Client
Service
Message
Endpoint
Service
Client
Endpoint
Endpoint
Message
Endpoint
Endpoint
Address, Binding, Contract
Client
Service
AEndpoint
B C
B A
CEndpoint
Message
AEndpoint
B C
AEndpoint
B C
Address
Binding
Contract
Dove ?
Come ?
Cosa ?
Inside Binding
Binding
HTTP
Transport
Text
Security
RM
TX
Protocol
Encoders
TCP
HTTP
Text
Security
RM
MSMQ
IPC
Binary
TX
.NET
Custom
Custom
Custom
Binding
Interoperabili
BasicHttpBinding
WsHttpBinding
WsDualHttpBinding
WCF / WCF
NetTcpBinding
NetNamedPipeBinding
NetMsmqBinding
NetPeerTcpBinding
Windows Activation Service
Nuovo modello di attivazione unificato condiviso da
ASP.NET, IIS7, e WCF
Supporto di protocolli multipli
Windows Activation Service (WAS)
NP Listener
Adapter
HTTP Listener
Adapter (IIS7)
TCP Listener
Adapter
Named Pipes
Transport Listener
HTTP.SYS
TCP Transport
Listener
WAS/IIS7 Architecture
Application Pool
Applicationhost.config
W3SVC
HTTP Mgr
Windows Activation Service
Config Mgr
Process Mgr
HTTP.SYS
Indigo Net.TCP
Listener
Indigo Net.Pipe
Listener
Application Pool
Application Pool
Application Pool
Application
Application Pool
Application
Application Pool
Application
Application
Application
Application
Application
Web.config
Application
Application
Web.config
Application
Web.config
IIS 7.0 Benefici Architettura
Process Activation Generalizzato
Supporto Estendibile multi-protocol
Health Management Configurabile
Side by Side deployment
Unified Management Model
Completamente Componentizzato
Guida verso WCF
ASMX
Quando siamo in dubbio,... usiamo ASMX
WSE
ASMX + WS-* in particolare Sicurezza
Enterprise Services
Per servizi aggiuntivi (Tx Distribuite)
essenzialmente x-machine communication
dentro i confini del servizio
System.Messaging
Per il messaging
Remoting
x-domain & custom transport
ASMX Guida
Utilizzare
Conformance claim
“Service” interface
Differenti indirizzi per ciascun binding
“Open content model” per i dati
Evitare
rpc/encoded
ASP.Net state o “dipendenze dal trasporto”
(esempio: HttpContext)
SoapExtension
WSE Guida
Utilizzare
I suggerimenti della ASMX guida
HTTP transport
“Turnkey” policy (WSE3)
MTOM (WSE3)
Evitare
Qualunque tipo di estensioni da SoapPort
Custom transport
IXmlElement per i data type
DIME
Da WSE a Indigo
Codice Client
public class myHelloWorld
{
static void Main (string[ ] args) {
HelloWorldWSE
= new HelloWorldWSE();
HelloWorld helloWorldhelloWorld
= new HelloWorld();
string response = helloWorld.Hello("hello");
}
}
Note: Modifiche configurative richieste
Da WSE a Indigo
Codice Server
using
Microsoft.Web.Services3;
using System.ServiceModel;
[ServiceContract]
[WebService]
class HelloWorld
{
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, null, "BUILTIN\Administrators")]
[WebMethod]
public string Hello (string text)
{
MessageSignature signature = (MessageSignature)
RequestSoapContext.Current.Security.Elements[0];
if (!signature.SigningToken.Principal.IsInRole("BUILTIN\Administrators"))
throw new AuthorizationException("Access denied");
return String.Format("Hello, {0}", text);
}
}
Note: Configuration entry changes are required
Riepilogo
La piattaforma applicativa Microsoft è pensata
per materializzare “Connected System”
I Web Service sono una componente
fondamentale e la piattaforma
Roadmap chiara e definita verso Windows
Communication Foundation (WCF)
Supporto migliorato in .NET v2.0 per
Interoperabilità, Produttività, Estendibilità
WSE 3.0 porta WS-Security in .NET 2.0
Percorso di migrazione\interoperabilità per WCF
garantito
© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Policy in WSE 3.0
Descrivono i requisiti per i messaggi in ingresso
ed in uscita attraverso Policy Assertion
Superano le limitazioni delle Policy in WSE 2.0
Request e Response separati
Complessità , necessita di pensare a basso livello alle
singole funzionalità ed aggregarle
Policy files semplificati
Semplificazione con i turnkey security assertion
Nuovo object model per le policy
serviceProxy.SetPolicy("ClientPolicy");
Utilizzo di attributi sia lato Server che Client
[Policy("UserNameOverX509")]
Policy Pipeline Architecture
Le Policy assertion
trasformano il
messaggio
Le Policy decrivono la input
pipeline
Custom
Tracing
Esecuzione
Codice
Applicativo
… e si esegue la output Pipeline
Custom
Tracing
Security
Output
Soap Message
Security
Input
Soap Message
Turnkey Security Scenario
UsernameForCertificate
Internet
Intranet
Username/Password
per Autenticazione
Confidenzialità, e firma
richiesta con client key
protetta con il certificato
server
Confidenzialità, e firma
risposta con chiave
fornita dal client
Application
Server
Auth con
username/
Password
Example Policy Assertion
public class UsernameOverX509Assertion : SecurityPolicyAssertion
{
// constructors
public UsernameOverX509Assertion() { }
// properties
public TokenProvider<UsernameToken> UsernameTokenProvider { get { }
set { } }
public TokenProvider<X509SecurityToken> X509TokenProvider { get { } set
{}}
// methods
public override SoapFilter CreateClientInputFilter(FilterCreationContext
context) { }
public override SoapFilter CreateClientOutputFilter(FilterCreationContext
context) { }
public override SoapFilter CreateServiceInputFilter(FilterCreationContext
context) { }
public override SoapFilter CreateServiceOutputFilter(FilterCreationContext
context) { }
public override IEnumerable<KeyValuePair<string, Type>>
GetExtensions() { }
public override XmlSchema GetSchema() { }
public override void ReadXml(XmlReader reader) { }
Client con Policy Assertion via
Codice
Utilizzo di una Turnkey Security Assertion
StockQuoteClient proxy;
Policy myPolicy = new Policy();
myPolicy.Assertions.Add(new UsernameOverX509Assertion());
proxy.SetPolicy(myPolicy);
Utilizzo di una Custom Policy Assertion
e.g. XML Schema Validation
StockQuoteClient proxy;
Policy myPolicy = new Policy();
myPolicy.Assertions.Add(new MyCustomAssertion());
proxy.SetPolicy(myPolicy);
Sessioni con Secure Conversation
Asymmetric key (X509 Certificate) lento per l’invio di messaggi
multipli
WS-SecureConversation definisce il Security Context Token
(SCT)
Ottimizzazione del messaging
Veloce nel caso di messaggi multipli (client makes > 2)
Raddoppio del throghput
Richiesta per SCT
SCT Issued al client
Client
Messaggi Multipli
Firmati e cifrati con SCT
Server
Integrazione con VS2005 e .NET
v2.0
Supporto di tool per Visual Studio 2005
Estensione dell’ ASMX programming model
Trasporti alternativi es. TCP
Hosting environment alternativi es. Console apps
Messaging APIs ancora supportate ma
deprecate
SoapClient, SoapService
Estensione del ASMX programming Model
Esempio: ASMX Web Service via TCP e Custom Host
public class StockService
System.Web.Services.WebService
{
[WebMethod]
public StockQuote[] StockQuoteRequest([string[]
symbols) { }
}
static void Main(string[] args)
{
Uri to = new Uri( "soap.tcp://StockService/StockQuote");
EndpointReference EPR = new EndpointReference(to);
SoapReceivers.Add (EPR, typeof (StockService));
}
Supporto per MTOM
Message Transmission Optimization
Mechanism (MTOM)
MTOM sostituisce DIME & WS-Attachments
Benefici
Componibile con WS-Security per proteggere
anche i dati come il SOAP message
Modello di programmazione semplificato e
attivazione via config
[WebMethod]
public byte[ ] GetFileAsBytes (string fileName)
{
return CreateFileAsBytesResponse (fileName);
}
Riduzione sul cavo della dimensione del
messaggio
Security
Semplifica
Riduzione
WSE 3.0: La strada verso
WCF(Indigo)
Grantita l’interoperabilità on the wire level con WCF
Supporto per gli scenari di sicurezza interoperabili
WSE turnkey security assertion allineati con WCF
security binding
WSE 3.0 si esegue side-byside con Indigo
Guide per l’upgrade fornite
per la migrazione da WSE 3.0
a WCF
Scarica

Indigo - Microsoft