e-Science, the Grid and Microsoft .NET Daragh Byrne, Neil Chue Hong, Ally Hume, Mike Jackson EPCC – University of Edinburgh http://www.epcc.ed.ac.uk/~ogsanet ogsanet-queries@epcc.ed.ac.uk GlobusWorld 2004, San Francisco – January 20th-23rd 2004 Microsoft is a trademark of Microsoft Corporation. Overview The MS.NETGrid Project OGSI on Microsoft .NET – MS.NETGrid-OGSI Grid Service Demonstrators Training Courses The MS.NETGrid Project Project Goals 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 ………… … ………… Project Parties EPCC – University of Edinburgh: Project management Design, development and implementation Authoring training materials Delivering training courses e-Science Grid Core Program: UK Department of Trade and Industry Funding Grid research and development projects 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 OGSI Implementations Microsoft .NET: University of Virginia: OGSI.NET Release 2.0 Java: Globus: Globus Toolkit 3 Release 1.0 Unicore Perl: University of Manchester: OGSI::Lite Python: Lawrence Berkley National Labs: pyGlobus So Why Yet Another? Facilitate uptake of OGSI: Implementations on different platforms Go to our target users Do not expect them to come to us Research: Exploit unused features and functionality of Microsoft .NET Exploit used features and functionality in a different way Competition OGSI on Microsoft .NET MS.NETGrid-OGSI Microsoft .NET In One (Just in case…) Develop stand-alone or Internet-enabled applications: Microsoft Intermediate Language (MSIL) – platform-independent Compilers for C#, C++, Visual Basic … Common Language Runtime (CLR) – MSIL execution Distributed computing – ASP.NET, remote method invocation, XML Internet Information Services – Web application hosting: Active Server Pages SOAP / WSDL-based Web services ASP.NET: Active Server Pages and Web service development Mapping SOAP request/response onto C# method call/return Tooling to generate client-side stub code from WSDL Automated generation of WSDL descriptions of services MS.NETGrid-OGSI Design Dimensions Use IIS and ASP.NET: Industry-standard Web services programming model Maintain integration with existing technology Facilitate speed of development 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 Provide a “representative implementation” of the core aspects of OGSI MS.NETGrid-OGSI Architecture based upon GT3-Core Exploits ASP.NET functionality Provides support for: Grid service hosting in ASP.NET Web services container Functionality relating to: GridService Factory NotificationSource, NotificationSubscription, NotificationSink 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 Access and Naming Persistent services: Server-managed services Necessary for factories, permanent services Naming: http://host/ogsa/services/persistent/SomeServiceFa ctory.asmx Transient services: Client-managed services Naming: http://host/ogsa/services/transient/SomeService.as mx?instanceID=someService1 Web 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 (.asmx) 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 SOAP communication and WSDL description for free Familiar model to ASP.NET users Potential for auto-generation of proxy code from WSDL Developing a Grid Service Grid Service Components SomeGridService.asmx compiled into SomeGridServiceProxy delegates to Service Implementation SomeGridServiceImpl ServiceDataSet SomePortTypeProvider SomeOtherPortTypeProvider 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! Implement the Service Analogous development models to those of GT3 / OGSI.NET: Extend a class implementing the GridService portType with additional operations from other portTypes Provide classes implementing the operations of a specific portType – PortType Providers GridServiceSkeleton and PersistentGridServiceSkeleton classes: Implement the GridService portType Contain a service data set Record a list of other service properties ServiceData APIs Notification APIs Implement the Service – Inheritance public class HelloServiceImpl : PersistentGridServiceSkeleton { int i = 0; // sayHello is an operation of a HelloWorld // portType public string sayHello(string name) { return “Hello, “ + name + “ “ + (++i); } } Implement the Service - PortType Providers (1) public class HelloWorldPt : 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(HelloWorldPt), “http://www.example.org/hello”, “HelloWorld”] public class HelloServiceImpl : PersistentGridServiceSkeleton { } Implement the Service - PortType Providers (2) ASP.NET attributes and reflection: OGSI.NET exploits this technology also and in a similar way On instantiation of GridServiceSkeleton: Object reflects upon self to get OgsiPortType attributes Uses the information in the attributes to instantiate implementation classes These are stored – indexed by portType name IPortTypeProvider interface: Can be implemented by any PortType Provider class Provides methods for initialisation and setting a reference to the main service class PortTypeProviderBase class: Implements IPortTypeProvider interface Implement the Service Proxy Communications layer between clients and Grid service objects Proxies are Web services Represents the most-derived portType: Provides methods corresponding to all the operations of all the portTypes implemented by a service GridServiceInstanceAspProxy and PersistentGridServiceInstanceAspProxy: Corresponding to GridServiceSkeleton and PersistentGridServiceSkeleton classes respectively Implement the Service Proxy - 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); } } Implement the Service Proxy - 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(“HelloWorldPt”, “SayHello”, args); } } Implement the Service Proxy Complete the Proxy Write .asmx file which references the proxy class <%@ WebService Class=“HelloService"%> Deploy the Service (1) Approach is analogous to GT3 and AXIS/Tomcat ASP.NET Web.config file – analogous to server-config.wsdd file <gridContainer> . . . <gridServiceDeploymentDescriptor asmxFileName=“HelloService.asmx” serviceClass=“HelloServiceImpl” assembly=“HelloAssembly” persistence=“persistent”> <serviceParameter name=“dbConnect” value=“someDB:location”/> <serviceParameter name=“key” value=“value”/> </gridServiceDeploymentDescriptor> <gridContainer> Deploy the Service (2) Copy assemblies to Ogsi.Container/bin/ Copy .asmx file to: Ogsi.Container/services/persistent/ OR Ogsi.Container/services/transient/ IIS maps http://host/ogsa/ virtual directory to Ogsi.Container http://host/ogsa/services/transient/HelloWorld.asm x => Ogsi.Container/services/transient/HelloWorld.asmx Design Limitations No rich client-side support: No Grid service-specific support But Grid services ARE Web services GSH naming is restrictive No support for GSR No support for GWSDL No ServiceGroup-related portTypes No HandleResolver portType No security support Grid Service Demonstrators Grid Service Demonstrators 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 Client Request (GDS-Perform document) Response (GDS-Response document) (WebRowSet) Grid Data Service ADO.NET SQL Server Open Grid Services Architecture – Data Access and Integration http://www.ogsadai.org.uk Stripped down from full OGSA-DAI functionality 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 - Edinburgh November 4th-5th 2003 - Edinburgh January 14th-15th 2004 - London February 24th-25th 2004 - Edinburgh UK e-Science Institute: http://www.nesc.ac.uk/esi Course Goals Introduce / review: Grid services, OGSA and OGSI Microsoft .NET Introduce OGSI on Microsoft .NET: MS.NETGrid-OGSI Use MS.NETGrid-OGSI to: Develop Grid services Develop clients Course Experiences Attendees from UK involved in Grid research, astronomy, particle physics, chemistry, informatics Majority stated worthwhile attending Likes: Practical hands-on use of MS.NETGrid-OGSI was especially popular Concise introduction lectures and a .NET overview MS.NETGrid-OGSI was reasonably straightforward to use Dislikes: Not enough diagrams and too much detail in text Not enough time spent on MS.NETGrid-OGSI itself Majority stated intent to use MS.NETGrid-OGSI for applications including: Particle physics, inter-operability testing, benchmarking, .NET familiarisation Questions ?