.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