Service Oriented Architecture From architecture to .NET 3.0 implementation
Reinhard Brongers Donald Hessing
VX Company VX Company www.vxcompany.com
Agenda • • • • • • • •
SOA, Services en Tenets Bericht en WCF ABC Contract Serialisatie Foutafhandeling WCF Extensiblity WF : Bedrijfsproces Businessdata persistence strategie Monitoring
Wat is SOA? “SOA is a broad, standards-based framework in which services are built, deployed, managed and orchestrated in pursuit of new and much more agile IT infrastructures that respond swiftly to shifting business demands.” (bron: www.computerworld.com.au)
Dus: SOA gaat hier ook over business….. • Service - Implementatie van (een deel van) een bedrijfsproces - Mapt op een proces(stap), niet op een applicatie(component) - Herbruikbaar, contract, loosely coupled, stateless, discoverable
• SOA <> Web Services • SOA = Wat, Web Services = Hoe
4 Tenets
• Boundaries are explicit • Services are autonomous • Services share schema and contract, not class or type • Services compatibility is determined by policy
4 Tenets Visueel Explicit Boundary: xml buiten, c# binnen
Policy based: autorisatie nodig
Indiensttreding
1
2
opslag basis
Schema not class: data, geen gedrag aanleveren
3
Pensioen
keuze
Autokeuze
Autonoom: Als eenheid te vervangen (versioneren)
Bericht
Afz. HR Afdeling
Arbeidsovereenkomst
Aan: Dhr. D. Hessing p/a VX Company Baarnschedijk 8 3740 AD Baarn
Bedrijfsdocument Services zijn onderdeel van een bedrijfsproces Indiensttreding Bedrijfsdocumenten bestaan uit entiteiten Entiteiten zijn binnen het bedrijfsproces bekend Over services heen dezelfde betekenis Denk in businessdocumenten XSD Geen compiler / runtime specifieke types Afnemer
Service
Windows Communication Foundation
Afnemer C
B
A
A
B
C
A
B
C
A
B
C
Proxy / ChannelFactory
Service
Service Host
Address
Binding
Contract
Waar?
Hoe?
Wat?
WCF Contracts • Message Contracts – Beschrijft de structuur van het bericht – Mapt CLR type op SOAP definitie • Service Contracts – Beschrijft de methodes die een service bevat – Mapt CLR type op WSDL • Data Contracts – Beschrijft de structuur van de data – Mapt CLR type op XSD definitie
Contract in WCF ServiceContract Operation
MessageContract
DataContract
Service Operation Stijlen
RPC-style
int Indiensttreding(string ..etc..); Document Processor naam, Pattern:
“SOA”-style
IndiensttredingResponse Indiensttreding(IndiensttredingRequest req);
Routing-style Message Service(Message m);
Service implementatie in .NET 3.0
Message
Deserialize
Business document DataContract
Externe Representatie (Svc Interface)
‘WCF’ Serializer
Mapping Business objects Mapping-Classes
Interne Representatie (Svc Implementatie)
DEMO WCF & SOA
SOA ontwikkel proces • • • • • •
Bepaal welke services en bedrijfsdocumenten Maak een keuze welke Serializer te gebruiken Maak op basis hiervan schema’s en wissel deze uit Maak vervolgens het ontwerp van je service Genereer met svcUtil.exe de contractcode Bouw de service implementatie
Analyse
Service identificatie
Schema
Bouw services Bouw afnemers
Schema-first aanpak !
DataContractSerializer • • • • •
Default Serializer voor WCF Gebaseerd op XmlElements Versionering Optionele elementen Subset van de xmlschema definitie Bestaande services gebruiken vaak xmlberichten die niet mappen op de DataContractSerialization • Opt-In concept: expliciet aangeven • Alternatief: Bekende XmlSerializer
Foutafhandeling • Vang alle exceptions af (een service mag nooit een unhandled exception gooien!) – System.Exception is .NET runtime specifiek – State van de service is inconsistent • Exceptions zijn compiler / runtime specifiek en moeten vertaald worden • Intern System.Exception, extern SOAP Faults • Foutafhandeling is onderdeel van het contract • Maak onderscheid tussen technische en functionele fouten • Verzamel de fouten tijdens proces
Faults [ServiceContract] public interface IIndiensttreding { [OperationContract] [FaultContract(typeof(MyServiceFault))] IndiensttredingResponse Indiensttreding(IndiensttredingRequest req) } try{ //Service implementatie; } catch (BusinessException e) { MyServiceFault f = new MyServiceFault (); FaultReason r = new FaultReason(“….."); throw new FaultException<MyServiceFault>(f, r); }
DEMO Faults
DEMO Extensibility: Schemavalidatie
WCF Extensibility • • • • •
XSD-Schema validatie Routering Logging Workflow integratie Etc.
Waar zijn we? WCF Host
XSD-validatie Extension HRM Service
Indiensttreding operatie
A
B
C
MeldAutokeuze operatie
MeldPensioenkeuze operatie Indiensttredingstatus operatie
(Deserialisatie) Mapping Validatie
????
Proces en Communicatie patroon • ShortRunning proces - Request/Response model • LongRunning proces - We weten niet wanneer de service klaar is - (Semi) Fire & Forget model - Polling • Duplex (callback) channels DON’t use in SOA. C
B
A
Afnemer C
B
A
Request / Response
Callback channel
A
B
C Service
A
B
C
Indiensttreding oplossing HRM service Workflow instance
Opslaan Activity
Autokeuze Activity
Indiensttreding operatie Endpoint
AutokeuzeGemaakt WFevent
MeldAutokeuze operatie IndiensttredingDAO.Ophalen() Indiensttredingstatus operatie WCF Host
WF en host communicatie WCF Host / Appdomain Workflow Runtime Workflow Instance [ExternalDataExchange] public interface IIndiensttredingWF Opslaan {event EventHandler<myArgs>submit}
Activity
HandleExternalEventActivity
Autokeuze Activity
Autokeuze Service
Public class myArgs :ExternalDataEventArgs{}
Workflows
DEMO WCF & WF integratie
Communicatie met WF runtime • Maak een interface en markeer deze met het ExternalDataExchange attribuut • Definieer een event argument type voor de parameters • Maak een class in de host applicatie die de interface implementeert • Hang de interface en het event aan een HandleExternalEvent activity in de workflow • Registreer de ExternalDataExchangeService bij de runtime bij het starten • Trigger het event vanuit de host applicatie
Of….. WCF Activities (Codeplex)
Data Persistency
Track: Keuze
Track: Einde WF
Opslaan basisgegevens
Opslaan auto
Business Data
Tracking Data
Track: Start WF
Demo Tracking & Monitoring
Businessdata persistence strategie • Bij LongRunning heeft de business primair behoefte aan de status van het proces (primair proces gestuurd) - Extra service voor ‘StatusInfo’ - SOA: Geen callbacks! • Bij ShortRunning heeft de business primair behoefte aan de status van de data. (primair resultaat gestuurd) - Request/Response communicatie • Wanneer business data opslaan - Incompleet maar toch valide - Pas valide als compleet
Bonus: Service Factory
There’s more to explore… • Versionering • Transaction strategies (Reservation/Compenstion) • Scalability • Governance • Rol van Biztalk Server • Etc.
Samenvatting / Take away points • • • • • •
Volg de 4 tenets ook in .NET 3.0 WCF gebruiken is niet automatisch SOA Denk vooraf na over Contract / Schema Gebruik WCF Extension points Kijk uit naar .NET 3.5 (WF-WCF integratie) Onderscheid Business Data en Process Data • Kijk naar ServiceFactory
Links • Defining SOA as an architectural style http://www.ibm.com/developerworks/archit ecture/library/ar-soastyle/ • Service Factory http://blogs.msdn.com/donsmith/ • DataContractSerializer versus XmlSerializer http://msdn2.microsoft.com/enus/library/ms733901.aspx
Einde
Voor vragen en broncode: Reinhard Brongers
[email protected]
Donald Hessing
[email protected]
Ask the Speaker Meet us after the presentation at Microsoft Plaza
Vragen? Reinhard Brongers
[email protected]
Donald Hessing
[email protected]