20
Presentation 23 .NET Remoting Introduced

Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Embed Size (px)

Citation preview

Page 1: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Presentation 23

.NET Remoting Introduced

Page 2: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 2 af 20

Outline

• .NET Framework introduced• .NET Remoting strategies• Architecture• Remoting object types• Activation• Lifetime• Deployment• Example applicationHigh-level introduction only!High-level introduction only!

Page 3: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 3 af 20

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

Page 4: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 4 af 20

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 umanaged 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– IIOP.NET (http://iiop-net.sourceforge.net/index.html) for CORBA

interop

Page 5: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 5 af 20

The .NET Framework Components

Win32Win32

MessageMessageQueuingQueuing

COM+COM+(Transactions, Partitions, (Transactions, Partitions,

Object Pooling)Object Pooling)IISIIS WMIWMI

Common Language RuntimeCommon Language Runtime

.NET Framework Class Library.NET Framework Class Library

ADO.NET and XMLADO.NET and XML

XML Web ServicesXML Web Services User InterfaceUser Interface

VisualBasic C++ C# Perl JScript …

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.

Sourcecode

Sourcecode CompilerCompiler

IntermediateLanguage

IntermediateLanguage

.NETFramework

.NETFramework

Other ILlibrariesOther ILlibraries

LinkerLinkerLinked

ProgramLinked

Program JIT-compilerJIT-compilerExecutableProgram

ExecutableProgram

Here we find the .NET Remoting libraries

Page 6: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 6 af 20

Ressources for learning more .NET

• Feel free to learn more about .NET:– Getting started with the .NET framework

• http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcongettingstartedwithnetframework.asp

– more specifically• http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrintroductiontonetframeworksdk.asp

– Link can be found at the course site– Books on the subject of .NET Remoting

• Remoting with C# and .NET by David Conger, Wiley (2003)• MSDN: Networking and Communication http://msdn.microsoft.com/library/

default.asp?url=/library/en-us/cpguide/html/cpovrintroductiontonetframeworksdk.asp

• Other relevant courses at IHA:– Windows programming (WIN1)– Komponent baseret udvikling (KPU1)

Page 7: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 7 af 20

.NET Framework Remoting 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, but 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 eiter HTTP/SOAP or TCP/Binary protocols, but 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

Page 8: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 8 af 20

Simplified .NET Remoting Architecture

Using the classic Proxy patternUsing the classic Proxy pattern

The Remoting System wraps most of the marshalling/unmarshalling work for you – like Java/CORBAThe Remoting System wraps most of the marshalling/unmarshalling work for you – like Java/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

Page 9: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 9 af 20

The Remoting Architecture

Proxy created dynamically by the CLR. Creates a message to the server

Proxy created dynamically by the CLR. Creates a message to the server

Serializes the message into a stream (SOAP or binary)

Serializes the message into a stream (SOAP or binary)

Optional extra handlingOptional extra handling

Writes the stream to the wire, e.g. TCP or HTTP

Writes the stream to the wire, e.g. TCP or HTTP

Deserializes the messageDeserializes the message

Developers are free to implement new channels or replace sink elementsDevelopers are free to implement new channels or replace sink elements

All server objects must be of type MarshalByRefObject or an descendant hereof

All server objects must be of type MarshalByRefObject or an descendant hereof

Dispatch to server objectDispatch to server object

Page 10: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 10 af 20

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

Page 11: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 11 af 20

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

Page 12: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 12 af 20

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

Page 13: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 13 af 20

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

Page 14: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 14 af 20

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

Page 15: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 15 af 20

InterfaceDefinition

Design

Server StubGeneration

Client StubGeneration

ServerCoding

ClientCoding

ServerRegistration

Development Steps – Remoting vs. CORBA & Java RMI

Java RMI: rmicJava RMI: rmic

RMI: JAVARMI: JAVA

J2SE JDKJ2SE JDK

Start with Server Interface Coding: JAVA

Start with Server Interface Coding: JAVA

rmiregistryrmiregistry

CORBACORBA

CORBA: IDLCORBA: IDL

CORBA: IDLCORBA: IDL

ORBORB

RMI: JAVA interfaceRMI: JAVA interface

C++, Java …C++, Java …

C++, Java …C++, Java …

CLS InterfaceCLS Interface

Implicit stub gen.Implicit stub gen.

CLS (C# …)CLS (C# …)

CLS (C# …)CLS (C# …)

RemotingConfiguration

with CLR

RemotingConfiguration

with CLR

.NET Remoting

.NET Remoting

Page 16: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 16 af 20

Making the HelloWorld application

• 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

Page 17: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 17 af 20

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 Internetpublic 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 Internetpublic interface IHelloWorld{

string sayHello(string name); }

}

The “IDL” of .NET Remoting – similar to Java RMI The “IDL” of .NET Remoting – similar to Java RMI

Page 18: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 18 af 20

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 interfaceLike 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 thesayHello methodImplementing thesayHello method

Page 19: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 19 af 20

Server code – Console bootstrappingusing 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 channelTcpChannel theChannel = new TcpChannel(8085)/* Register the channel so that clients can * connect to the server */ChannelServices.RegisterChannel(theChannel);

//Register the service on the channelRemotingConfiguration.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 channelTcpChannel theChannel = new TcpChannel(8085)/* Register the channel so that clients can * connect to the server */ChannelServices.RegisterChannel(theChannel);

//Register the service on the channelRemotingConfiguration.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 channelon port 8085

Register the channelon port 8085

Register theobject

Register theobject

Like in Java RMI (& CORBA) – we need some bootstrapping code – a server process 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 applicationThis may become a Windows NT service or a simple application, e.g. a console or Windows Form application

Page 20: Presentation 23.NET Remoting Introduced. Ingeniørhøjskolen i Århus Slide 2 af 20 Outline.NET Framework introduced.NET Remoting strategies Architecture

Ingeniørhøjskolen i ÅrhusSlide 20 af 20

Client code – Console bootstrapping… include all the Remoting stuffnamespace 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 callstring 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 stuffnamespace 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 callstring greeting = helloWorld.sayHello(name);System.Console.WriteLine("We recieved from server: "+greeting);System.Console.WriteLine("Press Enter to end");System.Console.Read();

}}

}

Create ProxyCreate Proxy

Call via Proxy objectCall via Proxy object

Optional (may be done implicitly)Optional (may be done implicitly)