OGSI on Microsoft .NET Daragh Byrne, Ally Hume, Mike Jackson EPCC http://www.epcc.ed.ac.uk/~ogsanet ogsanet-queries@epcc.ed.ac.uk Budapest, Hungary – November 10th-11th 2003 Some slides within this presentation have been graciously contributed by the OGSA-DAI project. Microsoft is a trademark of Microsoft Corporation. Overview MS.NETGrid Project Web Services, OGSA and OGSI OGSI on Microsoft .NET – MS.NETGrid-OGSI Grid Service Demonstrators Training Courses Project Goals Goals: Engaging and training the UK e-Science community in OGSI and .NET Facilitate uptake of .NET for developing Grid services Achieve via delivery of: Free-source OGSI implementation on .NET Free-source Grid service demonstrators Training materials Training courses Project Partners EPCC: Project management Design, development and implementation Authoring training materials Delivering training courses Microsoft Research Limited (Cambridge): Technical consultancy and expertise Provision of training materials NeSC – UK National e-Science Centre: Production and negotiation of collaboration agreement Hosting training courses Project Activities OGSADAI e-Science Application e-Science Application OGSI Microsoft .NET OGSI and Microsoft .NET OGSI and Course Microsoft .NET … OGSI … …Course … … and Microsoft .NET … OGSI … …Course … … and Microsoft .NET … Course ………… … ………… Web Services, OGSA and OGSI Web Services Network-enabled application Exposes a well-defined interface Stateless: Born Services Request Dies Accessible using common Internet protocols HTTP XML-oriented technology: Describe services and their interfaces WSDL – Web Services Description Language Support messaging SOAP – Simple Object Access Protocol WSDL Web Services Description Language XML description of Web Services: Define input and output messages Define operations in terms of input and output messages Aggregate operations into portTypes Application-specific collections of related operations Combine portTypes with a concrete network protocol and message format to form a binding Combine a binding and a network address to define a concrete network endpoint or port Aggregate ports into an abstract network endpoint or service Current W3C version is 1.1 What is OGSA? Open Grid Services Architecture Open Grid Architecture + Web Services = Grid Services Grid Services: Dynamic Transient Stateful – have a finite lifetime Defined by a well-defined set of interfaces and behaviours More information from http://forge.gridforge.org OGSA Characteristics Supports: Resource access Resources sharing Service integration Uniform access to services Specifies protocols and standards that: Are: Implementation-independent Platform-independent Support: Communication Data access, transfer, translation and transformation Access and security Auditing and logging What is OGSI? Open Grid Services Infrastructure Minimum set of standards and behaviours with which Grid Services must comply Exploits existing Web Services properties: Interface abstraction via WSDL portTypes Web Service protocols Hosting platform-independent Extends these to provide for: State management Event notification Service location and access Lifecycle management Service data More information from: http://forge.gridforge.org Anatomy of a Grid Service • Service Data Access • Lifetime Management GridService portType (required) Other PortTypes (Optional) •Service Creation •Service Grouping •Notification •Handle Resolution •Other functions e.g: Handle Element Element Service Data Element Grid Service Hosting Environment •Workflow •Auditing •Resource Management Anatomy of a Grid Service • Service Data Access • Lifetime Management GridService portType (required) Other PortTypes (Optional) •Service Creation •Service Grouping •Notification •Handle Resolution •Other functions e.g: Handle Service Element Element ElementSet Data Implementation Hosting Environment •Workflow •Auditing •Resource Management Anatomy of a Grid Service • Service Data Access • Lifetime Management GridService portType (required) Other PortTypes (Optional) •Service Creation •Service Grouping •Notification •Handle Resolution •Other functions e.g: Handle Service Data Service Data Service Data Implementation Hosting Environment •Workflow •Auditing •Resource Management OGSI PortTypes (1) GridService findServiceData setServiceData requestTerminationBefore requestTerminationAfter destroy Factory createService HandleResolver findByHandle ServiceGroup OGSI PortTypes (2) ServiceGroupRegistration add remove ServiceGroupEntry NotificationSource subscribe NotificationSubscription NotificationSink deliverNotification WSDL and GWSDL WSDL 1.1: Lack of portType inheritance A portType cannot be defined in terms of an aggregation or extension of one or more other portTypes Lack of an open content model Needed for specifying service data GWSDL: portType inheritance Open content model Stepping stone to WSDL 1.2 GWSDL => WSDL 1.1: Flattening the inheritance hierarchy The “most-derived” portType WSDL 1.2 Grid Service Identification Grid Services are identified by means of a Grid Service Handle (GSH), which is used to find the Grid Service Reference (GSR) that is unique to an instance of a Grid Service A HandleResolver service is used to provide a GSR given a GSH GSH: Type of URI (or URL) Constant for the lifetime of the Grid Service GSR: Representation of the service interfaces Can be a WSDL document Can change if the service evolves OGSI Implementations Microsoft .NET: EPCC: MS.NETGridOGSI Release 1.1 University of Virginia: OGSI.NET Release 1.1 Java: Globus: Globus Toolkit 3 Release 1.0 Unicore Perl: University of Manchester: OGSI::Lite Python: Lawrence Berkley National Labs: pyGlobus OGSI on Microsoft .NET MS.NETGrid-OGSI Design Dimensions Use IIS/ASP.NET: Facilitate speed of development SOAP and WSDL handling for free! Industry-standard Web services programming model Maintain integration with existing technology Exploit existing knowledge of developers Utilise .NET class library Rich framework for XML programming, serialization etc. Use an object instance to represent a service instance Creating service object and loading state every request is too costly: Performance-wise Development time-wise Design Limitations No rich client-side support: No Grid service-specific support But Grid services ARE Web services! GSH / GSR support Subset of OGSI portTypes Security But can secure using ASP.NET Web Services Security No GWSDL MS.NETGrid-OGSI Implementation of OGSI on Microsoft .NET Leverages ASP.NET functionality Provides support for: Grid service hosting in ASP.NET Web services container GridService portType-related functionality Factory portType-related functionality Service data management Management of persistent and transient services Client-Service Interaction C# Implementation 8. C# method return Proxy (from WSDL) Client 1. C# method call 7. SOAP response 2. SOAP request HTTP ASP.NET Web Service Proxy (.asmx) 3. Grid Service ID C# Implementation 4. Grid Service Object Reference 5. Operation Call 6. Operation Return OGSI Container Grid Service Grid Service Grid Service Service Lifetime and Naming Persistent services: Server-managed services Necessary for factories, permanent services Naming http://host/Ogsi.Container/services/persistent/Som eServiceFactory.asmx Transient services: Client-managed services Naming http://host/Ogsi.Container/services/transient/Some Service.asmx?instanceID=someService1 Service Proxy Model Service proxy is standard ASP.NET Web service Created – processes request - dies Communications layer between client and Grid services: One proxy type corresponds to one or more Grid services One instance of a proxy created per service request to .asmx file GSH is used by proxy to find Grid service object Reflection allows invocation of a service method on that object Operations exposed via WebMethod attributes SOAP communication and WSDL description for free! Familiar model to ASP.NET users Potential for auto-generation of proxy code Developing a Grid Service Grid Service Design What services will your Grid service provide? What operations will it support? How are these operations aggregated into portTypes? What existing and new portTypes will your service implement? No need to write WSDL! Grid Service Development Implement the service functionality: GridServiceSkeleton-derived OR PersistentGridServiceSkeleton-derived PortTypeProviders for portTypes Provide a service proxy class: Communications layer between clients and services No original effort required! Represents the most-derived portType Inherits from GridServiceInstanceAspProxy (which derives from ASP.NET class WebService) Deploy the service: ASP.NET Web service deployment descriptor (Web.config) Location of classes and proxies / service lifetime type Application-specific information Implement the Service Functionality MS.NETGrid-OGSI Classes Inherit from: GridServiceSkeleton OR PersistentGridServiceSkeleton Hello Service: public class HelloServiceImpl : PersistentGridServiceSkeleton { . . . . . . . . . } GridServiceSkeleton (1) Implements GridService portType functionality: findServiceData, setServiceData, requestTerminationBefore, requestTerminationAfter, destroy InstanceServiceDataSet property: ServiceDataSet for the live running service instance ServiceDataSet and ServiceData APIs ServiceParameters property: General purpose hashtable Loaded with configuration data from a deployment descriptor when service is initialised PortTypeProviders property: Hashtable containing references to implementations of portTypes GridServiceSkeleton (2) PostCreate method public abstract class GridServiceSkeleton { public virtual void PostCreate() { } } Can be used for resource acquisition, service data initialisation, other initialisation: Called by the container or factory when service is created Store useful items in ServiceParameters hashtable Only for objects used by all the portTypes of a service Implementing PortType Operations Option 1 - Inheritance: Provide methods on a GridServiceSkeleton-derived class Recommended when only one portType is required Quick and convenient Option 2 – PortType Providers: Use IPortTypeProvider implementations Use OgsiPortType attribute to associate with service class PortTypeProviders property of GridServiceSkeleton Maps requests to IPortTypeProvider instances Modularises portType and service implementations Inheritance public class HelloServiceImpl : PersistentGridServiceSkeleton { int i = 0; // sayHello is an operation on some portType public string sayHello(string name) { return “Hello, “ + name + “ “ + (++i); } } PortType Providers (1) public class HelloPortType : PortTypeProviderBase { int i = 0; public string sayHello(string name) { return “Hello, “ + name + “ “ + (++i); } public override void Initialise() { } } // Declare service and attach portType using attribute [OgsiPortType(typeof(HelloPortType), “http://mydomain.com/NameSpace”, “HelloPortType”] public class HelloServiceImpl : PersistentGridServiceSkeleton { } PortType Providers (2) public interface IPortTypeProvider { GridServiceSkeleton ServiceInstance { get; set; } void Initialise(); } Provides for: Access to service instance Custom initialisation code – called after the IPortTypeProvider is created Attach to service with OgsiPortTypeAttribute PortTypeProviderBase gives simple implementation of PortTypeProvider How PortType Providers Work Attributes and reflection! On instantiation of GridServiceSkeleton: Reflects upon self to get OgsiPortType attributes Uses the information in the attributes to instantiate implementation classes [OgsiPortType(typeof(HelloPortType), “http://mydomain.com/NameSpace”, “HelloPortType”] Stores instances in PortTypeProviders hashtable Methods can then be called on these instances Service Data Named like any XML element: (namespace, local name) Represented by an instance of the Ogsi.ServiceData.ServiceData type ServiceDataSet type represents the entire collection of service data for a service GridServiceSkeleton.InstanceServiceData Service Data APIs ServiceDataSet: Create(XmlQualifiedName name); Add(ServiceData data); Contains(XmlQualifiedName name); Delete(XmlQualifiedName name); Remove(XmlQualifiedName name); ServiceData: Contains System.Object(s) GetValues() / GetValuesArray() Value property SetValues(object [ ]) Callback property for on-demand generation Uses IServiceDataValuesCallback Provide a Service Proxy Class Service Proxies Communications layer between clients and Grid service objects Proxies are Web services Based on System.Web.Services.WebService class of ASP.NET Allows ASP.NET to forward service requests to/from Grid service objects: GridServiceInstanceAspProxy and PersistentGridServiceInstanceAspProxy Proxies and Inheritance // HelloService.cs public class HelloService : PersistentGridServiceInstanceAspProxy { [WebMethod] // Any other ASP.NET attributes public string SayHello(string name) { object [] args = { name }; return (string) CallMethod(“SayHello”, args); } } GridServiceInstanceAspProxy / PersistentGridServiceInstanceAspProxy constructor provides reference to service instance object via container CallMethod invokes on service instance object Proxies and PortType Providers // HelloService.cs public class HelloService : PersistentGridServiceInstanceAspProxy { [WebMethod] // Any other ASP.NET attributes public string SayHello(string name) { object [] args = { name }; return (string) CallMethodOnProvider(“HelloPortType”, “SayHello”, args); } } Completing the Proxy Write .asmx file which references proxy type <%@ WebService Class=“HelloService"%> Deploy the Service Deployment Descriptors and ASP.NET Web.Config gridContainer element Add gridServiceDeploymentDescriptor: <gridServiceDeploymentDescriptor asmxFileName=“HelloService.asmx” serviceClass=“HelloServiceImpl” assembly=“HelloAssembly” persistence=“persistent”> <serviceParameter name=“key” value=“value”/> </gridServiceDeploymentDescriptor> Attributes: asmxFileName - .asmx file for proxy service – main service implementation class assembly - service and proxy assembly persistence - transient or persistent Provide the Service Copy assemblies to Ogsi.Container/bin/ directory Copy .asmx file to: services/persistent directory OR services/transient directory Grid Service Demonstrators Grid Service Demonstrators Representative examples provided with the MS.NETGrid-OGSI distribution Basic GridService: Implements GridService portType Persistent and transient services available, with factory Counter Service: A simple transient counter service which maintains state An associated persistent factory service A client with a graphical user-interface OGSA-DAI Grid Data Service (1) Client Request (GDS-Perform document) Response (GDS-Response document) (WebRowSet) Grid Data Service SQL Server Open Grid Services Architecture – Data Access and Integration http://www.ogsadai.org.uk Stripped down from full OGSA-DAI functionality Service-database communication over ADO.NET OGSA-DAI Grid Data Service (2) Training the UK e-Science Community Training Courses “OGSI on Microsoft .NET” Designed for UK e-Scientists Four courses each for 25 attendees: September 9th-10th 2003 November 4th-5th 2003 January 27th-28th 2004 February 2004 e-Science Institute in Edinburgh http://www.nesc.ac.uk/esi Course Goals Introduce / review: Grid Services Microsoft .NET Introduce OGSI on Microsoft .NET MS.NETGrid-OGSI Use MS.NETGrid-OGSI: Develop a Grid Service Develop a client Introduce related OGSI on Microsoft.NET work Course Outline – Day 1 Welcome and Workshop Overview Grid Services Web Services and XML Grids, OGSA and OGSI Essential Microsoft .NET Concepts .NET Framework Overview C# Recap, Assemblies and Using Metadata ASP.NET OGSI and .NET Why OGSI on .NET? MS.NETGrid-OGSI Obtaining, installing and testing MS.NETGrid-OGSI Practical Course Outline – Day 2 Recap Developing a Grid Service 1 Practical Developing a Grid Service 2 Practical Developing a Grid Service 3 Practical Miscellaneous: MS.NETGrid-OGSI Demonstrators Course Feedback Discussion Near Future Revision of OGSI on .NET container Facilitating scalability and service persistence Development of additional Grid service demonstrators: Practical demonstration of the utility of OGSI on .NET Revision of training materials: Courses and supporting materials on OGSI and .NET Delivery of additional courses