.NET Remoting

Download Report

Transcript .NET Remoting

.NET Remoting
Łukasz Zawadzki
Plan prezentacji







Co to jest .NET Remoting
Definicja AppDomain
Typy zdalnych obiektów
Sposoby przekazywania obiektów(MBV i MBR)
Formatery serializacji
Dwa sposoby tworzenia aplikacji(konfigruacja z
XML i konfiguracja z poziomu kodu)
Zarządzanie stanem zdalnego obiektu
Co to jest .NET Remoting??

Sposób zdalnego wywoływania metod i dostępu
do obiektów znajdujących się w różnych
AppDomain, procesach, komputerach
Co to jest AppDomain??

Rodzaj abstrakcyjnego obiektu reprezentującego
domenę aplikacji (zbiór procesów aplikacji)
Typy zdalnych obiektów



Singlecall
Singleton
COA( Client Activated Object)
Sposoby przekazywania obiektów



MBV( Marshal by value)
MBR( Marshal by reference)
serializable
Formatery serializacji



Do czego służą formatery??
Interfejs IRemotingFormatter
Dwa rodzaje formaterów : SoapFormatter(
oparty na Simple Object Access Protocol) i
BinaryFormatter
Konfiguracja

Klasa obiektu zdalnego:
namespace ServerClass
{
public class MainClass : System.MarshalByRefObject
{
public int add(int a, int b)
{
return a+b;
}
}
}
Konfiguracja XML


Nazwa pliku konfiguracyjnego : „*.cfg”
Po stronie serwera :
Config.cfg
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall"
objectUri="MyServer"
type="ServerClass.MainClass, ServerClass„/>
</service>
<channels>
<channel ref="tcp" port="8881"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Konfiguracja XML
Kod aplikacji serwera:
public static void Main()
{
try
{
RemotingConfiguration.Configure("C:\\config.cfg");
Console.ReadLine();
}
catch(System.Runtime.Remoting.RemotingException e)
{
Console.WriteLine(e.StackTrace);
Console.WriteLine("WYJATEK!!!");
Console.ReadLine();
}
}

Konfiguracja XML
Po stronie klienta
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp">
<clientProviders>
<formatter ref="binary"/>
</clientProviders>
</channel>
</channels>
<client>

<wellknown url="tcp://localhost:8881/MyServer" type="ServerClass.
MainClass, ServerClass"/>
</client>
</application>
</system.runtime.remoting>
</configuration>
Konfiguracja XML
Kod aplikacji klienckiej:
static void Main(string[] args)
{
//konfiguracja klienta z pliku c:\client.cfg
RemotingConfiguration.Configure("C:\\client.cfg");
int a, b, c;
a=3;
b=4;
//pośrednik reprezentujący obiekt serwerowy
ServerClass.MainClass add=new ServerClass.MainClass();
c=add.add(a, b);
Console.WriteLine(c);
}

Konfiguracja z poziomu kodu
Serwer:
public static void Main()
{
try
{
int port = 8881;
TcpChannel chnl = new TcpChannel(port);
ChannelServices.RegisterChannel(chnl);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(MainClass), „MyServer", WellKnownObjectMode.SingleCall);
Console.ReadLine();
}
catch(System.Runtime.Remoting.RemotingException e)
{
Console.WriteLine(e.StackTrace);
Console.WriteLine("WYJATEK!!!");
Console.ReadLine();
}
}

Konfiguracja z poziomu kodu
Klient:
static void Main(string[] args)
{
MainClass mk = (MainClass)
Activator.GetObject( typeof(MainClass),
„tcp://host:port/MyServer"); ");
int a, b, c;
a=3;
b=4;
c= mk.add(a, b);
Console.WriteLine(c);
}

Zarządzanie stanem



InitialLeaseTime(czas przy inicjalizacji)
SponsorshipTimeout ( przedawnienie po
nieudanym połączeniu)
RenewOnCallTime( o jaki czas przedłużamy
życie obiektu przy każdym odwołaniu się do
niego)
Przykład
// metoda wywoływana na rzecz zdalnego obiektu do
inicjalizacji charakterystyk czasowych jego życia
public override object InitializeLifetimeService()
{
ILease lease = (ILease)base.InitializeLifetimeService();
if (lease.CurrentState == LeaseState.Initial)
{
lease.InitialLeaseTime = TimeSpan.FromMinutes(1);
lease.SponsorshipTimeout =TimeSpan.FromMinutes(2);
lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
}
return lease;
}
Inicjalizacja samodzielna
// kod już bezspośrednio po stronie klienta
ILease lease = (ILease)RemotingServices.GetLifetimeService(ZdalnyObiekt);
TimeSpan expireTime = lease.Renew(TimeSpan.FromSeconds(60));
Podsumowanie

Codeguru.pl

http://msdn.microsoft.com/library/default.asp?url=/li
brary/enus/cpguide/html/cpconnetremotingoverview.asp