duminică, 7 decembrie 2008

Not funny

Acest post este unul mai exclusivist, intrucat are un public tinta destul de restrans. Ma incadrez in timp ce scriu in grupul celor care lucreaza cu .NET Remoting. Grupul Zap sharefree ne saluta :D.
In periplul meu prin lumea incantatoare a serviciilor Windows si a obiectelor instantiate remote am avut o problema destul de sacaitoare. Cu Windows Server 2003. Scos 10 peri albi.
Pentru cei care inca nu stiu despre ce este vorba dar se incapataneaza sa citeasca in continuare, un scurt about .Net Remoting gasiti aici.
In C# obiectele folosite pentru comunicare intr-un scenariu remote sunt fie marcate cu atributul Serializable (sunt serializate si transmise ca atare de la server la client si viceversa), fie mostenesc din clasa MarshalByRefObject (se instantiaza pe client doar un proxy spre obiectul respectiv si acest proxy este folosit pentru comunicare). In cel de-al doilea caz, obiectele propriu-zise au o durata de viata determinata de un lease sponsor. Si in Windows Server 2003 exista o problema cu acest sponsor: va face orice aplicatie remote sa aiba un comportament pur nedeterminist. Asta pentru ca expira foarte repede lease-ul obiectelor. Si pentru ca sunt simpatica, va ofer si o solutie (e bine de scris asta in cod si preventiv, nu stiti niciodata pe ce sistem vor instala clientii serviciile): in fiecare obiect MarshalByRefObject trebuie suprascrisa metoda InitializeLifetimeService astfel incat sa intoarca null. Easy, right?:D
Here's a piece of pie example:

class MyRemote : MarshalByRefObject
{
  private int myMember;
  private void SomeMethod()
{
//do something
}

 public override void InitializeLifetimeService
 {
  return null;
 }
}

Don't you just love C# code? :p

Etichete: , , ,

0 comentarii:

Trimiteți un comentariu

Abonați-vă la Postare comentarii [Atom]

<< Pagina de pornire