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