Presentation is loading. Please wait.

Presentation is loading. Please wait.

Presentation 23:.NET Remoting Introduced Objektorienteret Middleware.

Similar presentations


Presentation on theme: "Presentation 23:.NET Remoting Introduced Objektorienteret Middleware."— Presentation transcript:

1 Presentation 23:.NET Remoting Introduced Objektorienteret Middleware

2 Outline.NET Framework introduced.NET Remoting Strategies Architecture Remoting object types Activation Lifetime Deployment Example application Windows Communication Foundation short intro

3 Not a Windows.NET course You will NOT be required to be an expert on.NET You will be required to be knowledgeable about it History: Open source, Java, Linux the WWW threatened MS Especially Java was gaining widespread support amongst developers for its ease of use, productivity and heterogeneity The Empire Strikes back = the.NET Framework

4 Benefits of.NET Changes EVERYTHING Takes all that was nice in Java and enhances it End of DLL incompatibilities, DLL Hell, COM registry hell Enter world of VM’s and Java like code (C#) including Garbage collection – BUT with easy support for legacy unmanaged code (e.g. C++ for speed) and COM Performs much better than Java, and almost equivalent with Win32 C++ applications Still only support Microsoft operating systems BUT.NET and C# is ECMA standard: Mono (www.go-mono.org) for Linux is being developed.www.go-mono.org IIOP.NET (http://iiop-net.sourceforge.net/index.html) for CORBA interophttp://iiop-net.sourceforge.net/index.html

5 .NET Framework Win32 MessageQueuingCOM+ (Transactions, Partitions, Object Pooling) IISWMI Common Language Runtime.NET Framework Class Library ADO.NET and XML XML Web Services User Interface Visual Basic C++C#PerlJScript… Application services. E.g. IIS, Message Queuing etc. CLR:runtime execution environment. Equlas JVM of Java. Microsoft Intermediate Language (MSIL) equals Java ByteCode A collection of class libraries (over 9000) wraps Win32 like Java API ActiveX Data Objects 3 types of user interfaces: Web forms, Windows forms (Win32), Command Console For inter-process communications Any language conforming to the Common Language Specification (CLS) may be used. Source code Source code Compiler Intermediate Language Intermediate Language.NET Framework.NET Framework Other IL libraries Other IL libraries Linker Linked Program Linked Program JIT-compiler Executable Program Executable Program Here we find the.NET Remoting libraries

6 Strategies Two.NET Remoting strategies: Web services for inter-business purposes Is heterogeneous across platforms and languages Supported by the.NET compact framework Relies primarily on HTTP/SOAP protocols, May be adapted for any type of protocol Heterogeneous Is slow when used with HTTP/SOAP.NET Remoting for intra-business purposes Is only heterogeneous across CLS languages Not supported by the.NET compact framework Relies on either HTTP/SOAP or TCP/Binary protocols, May be adapted for any type of protocol Is fast when used with TCP/Binary Only heterogeneity within.NET runtime In many ways very similar to Java RMI in Java 5

7 Simplified.NET Remoting Architecture Using the classic Proxy pattern The Remoting System wraps most of the marshalling/unmarshalling work for you – like CORBA Channel: Takes a stream of data and transports it to another computer or process: Default: TcpChannel & HttpChannel Channel: Takes a stream of data and transports it to another computer or process: Default: TcpChannel & HttpChannel

8 The Remoting Architecture Proxy created dynamically by the CLR. Creates a message to the server Serializes the message into a stream (SOAP or binary) Optional extra handling Writes the stream to the wire, e.g. TCP or HTTP Deserializes the message Developers are free to implement new channels or replace sink elements All server objects must be of type MarshalByRefObject or an descendant hereof Dispatch to server object

9 Remotable Objects in.NET Remoting Marshal-by-reference objects By-reference – no state is transferred MarshalByRefObject Corresponds to CORBA Interface IDL and Java RMI Remote objects (UnicastRemote objects) Proxy created Marshal-by-value objects By-value – complete object is serialized and transferred Implements ISerializable or decorated with Serializable Attribute [Serializable] Very similar to Java RMI Serializable objects Some similarity with CORBA valuetypes (Objects by Value)

10 Activation All server objects needs to be activated before a client proxy may access it Two types of activation Server Activation (SAO) Activated when first client request arrives at server –Singleton: only one server instance for all clients –Single-call: a new server object pr. client request Lifetime is defined by server Client Activation (CAO) Activated by the client with the CreateInstance method on the Activator object Server object only associated with creating client Lifetime is controlled by client (using leases) Very different semantics than CORBA & RMI – closer to Web services (application, session, request scope) especially SAO

11 Lifetime management.NET Remoting uses leases for lifetime management All server objects has a lifetime lease – a time-to-live Lease manager controls the server object leases If expired – check all sponsors (clients) performs garbage collection on server objects In DCOM reference counting & pinging In CORBA ORB vendor specific Often implemented as “time since last request” In Java RMI uses leases (similar to.NET Remoting). Clients auto-update lease at 50% Web services Toolkit specific (HTTP primitives: Application, Session, Request) Application scope = runs for-ever / singleton

12 Configuration Configuration: Need to inform runtime which servers are available and at which address (URL) Two types of configuration Programmatic (shown in example next) Configuration file Web.config (e.g. with IIS) or Machine.config

13 Deployment Server objects may be deployed as: Windows Form application Windows Console application Windows Service Internet Information Server deployment no need for a server bootstrapping application

14 Interface Definition Design Server Stub Generation Client Stub Generation Server Coding Client Coding Server Registration Development Steps – Remoting vs. CORBA & Java RMI Java RMI: rmic RMI: JAVA J2SE JDK Start with Server Interface Coding: JAVA Start with Server Interface Coding: JAVA rmiregistry CORBA CORBA: IDL ORB RMI: JAVA interface C++, Java … CLS Interface Implicit stub gen. CLS (C# …) Remoting Configuration with CLR Remoting Configuration with CLR.NET Remoting.NET Remoting

15 Making the HelloWorld App Using Microsoft Visual Studio.NET may of course be done with.NET Framework alone Make Client & Server solutions Server: IHelloWorld.cs interface HelloWorld.cs class implementation Server.cs class implementation for boot-strapping Add Reference to assembly System.Runtime.Remoting Client Must add IHelloWorld.cs Client.cs class implementation Add Reference to assembly System.Runtime.Remoting

16 The IHelloWorld Interface using System; namespace RemotingHelloServer { // IHelloWorld is the interface for the HelloWorld server class. // It is the interface that is shared across the Internet public interface IHelloWorld { string sayHello(string name); } using System; namespace RemotingHelloServer { // IHelloWorld is the interface for the HelloWorld server class. // It is the interface that is shared across the Internet public interface IHelloWorld { string sayHello(string name); } The “IDL” of.NET Remoting – similar to Java RMI

17 HelloWorld Implementation Code using System; using System.Runtime.Remoting; namespace RemotingHelloServer { // HelloWorld is a server object that is available // "by-reference". It contains a constructor and a the // "sayHello" method taking a string parameter "name" public class HelloWorld : MarshalByRefObject, IHelloWorld { private string greeting; public HelloWorld() { greeting = "OOMI Christsmas greetings from the server to: "; } public string sayHello(string name) { return (greeting + name); } using System; using System.Runtime.Remoting; namespace RemotingHelloServer { // HelloWorld is a server object that is available // "by-reference". It contains a constructor and a the // "sayHello" method taking a string parameter "name" public class HelloWorld : MarshalByRefObject, IHelloWorld { private string greeting; public HelloWorld() { greeting = "OOMI Christsmas greetings from the server to: "; } public string sayHello(string name) { return (greeting + name); } Like in Java RMI (& CORBA) – we need to have an implementation of the interface A remote object “by-reference” that implements the IHelloWorld interface A remote object “by-reference” that implements the IHelloWorld interface Implementing the sayHello method Implementing the sayHello method

18 Server Code – Console Bootstrapping using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; namespace RemotingHelloServer { public class Server { [STAThread] static void Main(string[] args) { //Create a TCP channel TcpChannel theChannel = new TcpChannel(8085) /* Register the channel so that clients can * connect to the server */ ChannelServices.RegisterChannel(theChannel); //Register the service on the channel RemotingConfiguration.ApplicationName = "HelloWorld App"; RemotingConfiguration.RegisterWellKnownServiceType( typeof(HelloWorld), "HelloWorld App", WellKnownObjectMode.SingleCall); /*Start the server and keep it running so that clients * can connect to it. May be aborted by keypress */ System.Console.WriteLine("Press Enter to end this server process"); System.Console.Read(); } using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; namespace RemotingHelloServer { public class Server { [STAThread] static void Main(string[] args) { //Create a TCP channel TcpChannel theChannel = new TcpChannel(8085) /* Register the channel so that clients can * connect to the server */ ChannelServices.RegisterChannel(theChannel); //Register the service on the channel RemotingConfiguration.ApplicationName = "HelloWorld App"; RemotingConfiguration.RegisterWellKnownServiceType( typeof(HelloWorld), "HelloWorld App", WellKnownObjectMode.SingleCall); /*Start the server and keep it running so that clients * can connect to it. May be aborted by keypress */ System.Console.WriteLine("Press Enter to end this server process"); System.Console.Read(); } Register the channel on port 8085 Register the channel on port 8085 Register the object Register the object Like in Java RMI (& CORBA) – we need some bootstrapping code – a server process This may become a Windows NT service or a simple application, e.g. a console or Windows Form application

19 Client Code – Console Bootstrapping … include all the Remoting stuff namespace RemotingHelloClient { public class Client { [STAThread] static void Main(string[] args) { TcpChannel theChannel = new TcpChannel(); ChannelServices.RegisterChannel(theChannel); /* Activate the server object. Activation will bring * the server object to life, and create a proxy * stub class of the HelloWorld. In fact, as this is a * server-activated application, the call to the * server is NOT performed now, but instead waits until the * first request. It is thus the server who performs the * activation. This is the "Lazy-activation pattern" known * from e.g. CORBA */ IHelloWorld helloWorld = (IHelloWorld) Activator.GetObject( typeof(RemotingHelloServer.IHelloWorld), "tcp://localhost:8085/HelloWorld App"); System.Console.WriteLine("Please enter your name and press Enter"); string name = System.Console.ReadLine(); //Make the call string greeting = helloWorld.sayHello(name); System.Console.WriteLine("We recieved from server: "+greeting); System.Console.WriteLine("Press Enter to end"); System.Console.Read(); } … include all the Remoting stuff namespace RemotingHelloClient { public class Client { [STAThread] static void Main(string[] args) { TcpChannel theChannel = new TcpChannel(); ChannelServices.RegisterChannel(theChannel); /* Activate the server object. Activation will bring * the server object to life, and create a proxy * stub class of the HelloWorld. In fact, as this is a * server-activated application, the call to the * server is NOT performed now, but instead waits until the * first request. It is thus the server who performs the * activation. This is the "Lazy-activation pattern" known * from e.g. CORBA */ IHelloWorld helloWorld = (IHelloWorld) Activator.GetObject( typeof(RemotingHelloServer.IHelloWorld), "tcp://localhost:8085/HelloWorld App"); System.Console.WriteLine("Please enter your name and press Enter"); string name = System.Console.ReadLine(); //Make the call string greeting = helloWorld.sayHello(name); System.Console.WriteLine("We recieved from server: "+greeting); System.Console.WriteLine("Press Enter to end"); System.Console.Read(); } Create Proxy Call via Proxy object Optional (may be done implicitly)

20 Configuration Strategi Alternative to Programmatic strategi: Use a Server Configuration file (Listener.exe.config) configuration> <wellknown mode="Singleton" type="RemotableType, RemotableType" objectUri="RemotableType.rem" />

21 Server Side Config Bootstrap Still need to implement: interface, MarshalByRef But boostrapping is much simpler using System; using System.Runtime.Remoting; public class Listener { public static void Main() { RemotingConfiguration.Configure("Listener.exe.config", false); Console.WriteLine("Listening for requests. Press enter to exit..."); Console.ReadLine(); } }

22 Client Configuration Strategi A Client Configuration file (Client.exe.config) <wellknown type="RemotableType, RemotableType" url="http://localhost:8989/RemotableType.rem" />

23 Client Side Config Load + Proxy Still need to implement: interface, MarshalByRef Generating dynamic proxy stub is simpler (VB.NET) Imports System Imports System.Runtime.Remoting Public Shared Sub Main() RemotingConfiguration.Configure(“Client.exe.config") Dim remoteObject As New RemotableType() Console.WriteLine(remoteObject.SayHello()) End Sub 'Main

24 Windows Communication Foundation (Kursorisk) Windows Vista =>.NET Framework 3.0 Also for Windows XP and 2003 Server Unified Service-Oriented Programming Model Replaces / Suplements.NET Remoting DCOM ASP.NET Web services MSMQ (Queued Messaging).NET Enterprise Services Protocol Neutrality and Flexibility http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/wcfroadmap.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/wcfarch.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/wcfroadmap.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/wcfarch.asp

25 Defining the Contract using System.ServiceModel; //a WCF contract defined using an interface [ServiceContract] public interface IMath { [OperationContract] int Add(int x, int y); } using System.ServiceModel; //a WCF contract defined using an interface [ServiceContract] public interface IMath { [OperationContract] int Add(int x, int y); } //the service class implements the interface public class MathService : IMath { public int Add(int x, int y) { return x + y; } } //the service class implements the interface public class MathService : IMath { public int Add(int x, int y) { return x + y; } }

26 Implementing the Service public class WCFServiceApp { public void DefineEndpointProgrammable() { //create a service host for MathService ServiceHost sh = new ServiceHost(typeof(MathService)); //use the AddEndpoint helper method to //create the ServiceEndpoint and add it //to the ServiceDescription sh.AddServiceEndpoint( typeof(IMath), //contract type new WSHttpBinding(), //one of the built-in bindings "http://localhost/MathService/Ep1"); //the endpoint's address //create and open the service runtime sh.Open(); } public void DefineEndpointInConfig() { //create a service host for MathService ServiceHost sh = new ServiceHost (typeof(MathService)); //create and open the service runtime sh.Open(); } public class WCFServiceApp { public void DefineEndpointProgrammable() { //create a service host for MathService ServiceHost sh = new ServiceHost(typeof(MathService)); //use the AddEndpoint helper method to //create the ServiceEndpoint and add it //to the ServiceDescription sh.AddServiceEndpoint( typeof(IMath), //contract type new WSHttpBinding(), //one of the built-in bindings "http://localhost/MathService/Ep1"); //the endpoint's address //create and open the service runtime sh.Open(); } public void DefineEndpointInConfig() { //create a service host for MathService ServiceHost sh = new ServiceHost (typeof(MathService)); //create and open the service runtime sh.Open(); } Create the Service Endpoint Programmatically Create the Service Endpoint Programmatically Create the Service Endpoint Using a Configuration File (see next slide) Create the Service Endpoint Using a Configuration File (see next slide)

27 Configuration File <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <endpoint address="http://localhost/MathService/Ep1" binding="wsHttpBinding" contract="IMath"/> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <endpoint address="http://localhost/MathService/Ep1" binding="wsHttpBinding" contract="IMath"/>

28 Implementing the Client Using Static Proxy //this class is generated by svcutil.exe //from the service's metadata //generated config is not shown here public class MathProxy : IMath {... } public class WCFClientApp { public void SendMessageToEndpoint() { //this uses a proxy class that was //created by svcutil.exe from the service's metadata MathProxy proxy = new MathProxy(); int result = proxy.Add(35, 7); } //this class is generated by svcutil.exe //from the service's metadata //generated config is not shown here public class MathProxy : IMath {... } public class WCFClientApp { public void SendMessageToEndpoint() { //this uses a proxy class that was //created by svcutil.exe from the service's metadata MathProxy proxy = new MathProxy(); int result = proxy.Add(35, 7); }

29 Implementing the Client Using Dynamic Proxy public class WCFClientApp { public void SendMessageToEndpointUsingChannel() { //this uses ChannelFactory to create the channel //you must specify the address, the binding and //the contract type (IMath) ChannelFactory factory=new ChannelFactory ( new WSHttpBinding(), new EndpointAddress("http://localhost/MathService/Ep1")); IMath channel=factory.CreateChannel(); int result=channel.Add(35,7); factory.Close(); } public class WCFClientApp { public void SendMessageToEndpointUsingChannel() { //this uses ChannelFactory to create the channel //you must specify the address, the binding and //the contract type (IMath) ChannelFactory factory=new ChannelFactory ( new WSHttpBinding(), new EndpointAddress("http://localhost/MathService/Ep1")); IMath channel=factory.CreateChannel(); int result=channel.Add(35,7); factory.Close(); }

30 Plenum Discussion Use 5 minutes in your groups: Differences with CORBA? Strength over CORBA? Weaknesses compared to CORBA? Plenum: 5 minutes discussion of findings

31 Læringsmål Alignment Når kurset er færdigt forventes den studerende at kunne: Definere, beskrive og sammenligne forskellige typer af objektorienterede middleware frameworks til apparater og computere, med primær fokus på CORBA og sekundært.NET Remoting teknologierne, herunder fordele og ulemper forbundet med de forskellige teknologier Definere og beskrive principper omkring transparens og heterogenitet i relation til middlewareteknologier Definere og beskrive gængse teorier, metoder og retningslinier indenfor det objektorienterede middleware paradigme og anvende disse til at designe effektive distribuerede systemer Designe og konstruere et distribueret system der gør brug af CORBA og.NET Remoting teknologierne med tilhørende værktøjssupport I kan nu definere og beskrive Grundlæggende.NET Remoting principper I kan nu definere og beskrive Grundlæggende.NET Remoting principper Stubbe, dynamisk Proxy, ”IDL”, Retningslinier, transp., hetero. manglende IDCl compiler, referencer Stubbe, dynamisk Proxy, ”IDL”, Retningslinier, transp., hetero. manglende IDCl compiler, referencer Grundlæggende forståelse For hvad der skal til af CORBA Teknologier, og værktøjer Grundlæggende forståelse For hvad der skal til af CORBA Teknologier, og værktøjer MANGLER: praktisk arbejde med.NET Remoting -> se øvelser


Download ppt "Presentation 23:.NET Remoting Introduced Objektorienteret Middleware."

Similar presentations


Ads by Google