Schedulazione Custom

La riconciliazione notturna ormai è parte integrante delle applicazioni che mi trovo a sviluppare tutti i giorni. 
Spessissimo mi capita di dover eseguire qualcosa (invalidazione della cache, pulizia di record sporchi, ecc) in un determinato momento, che sia questo in un'applicazione web o in un servizio.

Queste procedure tra decine di servizi e applicazioni web sono sempre difficoltose da gestire, spesso alcune devo essere seguite dopo altre o solo in alcuni giorni.

Proprio per questa serie di motivi che ho deciso di crearmi un servizio custom del tutto autonomo in cui, tramite file di configurazione, devo solo specificare cosa, dove e quando devo effettuare una chiamata.

Tradotto in codice viene fuori una roba del genere:

<schedule name="mySchedule"> 
  <service proxyFullyQualifiedName="MyServiceClient, Imperugo.Services.Client"> 
    <method scheduleName="sc1" methodName="Test"> 
      <day weekDay="Sunday" startTime="19:00:00"> 
        <parameter parameterName="param1" parameterType="System.Int32"parameterValue="10" /> 
        <parameter parameterName="param2" parameterType="System.String"parameterValue="prova"></parameter> 
        <parameter parameterName="param3" parameterType="System.Int32"parameterValue="4"></parameter> 
       </day> 
       <day weekDay="Monday" startTime="19:00:00" /> 
       <day weekDay="Tuesday" startTime="19:00:00" /> 
       <day weekDay="Wednesday" startTime="19:00:00" /> 
       <day weekDay="Thursday" startTime="19:00:00" /> 
       <day weekDay="Friday" startTime="19:00:00" /> 
       <day weekDay="Saturday" startTime="19:00:00" /> 
    </method> 
  </service>

   <service proxyFullyQualifiedName="MyServiceClient, Imperugo.Services.Client"> 
    <method scheduleName="sc1" methodName="Test"> 
      <day weekDay="Sunday" startTime="19:00:00"> 
        <parameter parameterName="param1" parameterType="System.Int32"parameterValue="10" /> 
        <parameter parameterName="param2" parameterType="System.String"parameterValue="prova"></parameter> 
        <parameter parameterName="param3" parameterType="System.Int32"parameterValue="4"></parameter> 
       </day> 
       <day weekDay="Monday" startTime="19:00:00" /> 
       <day weekDay="Tuesday" startTime="19:00:00" /> 
       <day weekDay="Wednesday" startTime="19:00:00" /> 
       <day weekDay="Thursday" startTime="19:00:00" /> 
       <day weekDay="Friday" startTime="19:00:00" /> 
       <day weekDay="Saturday" startTime="19:00:00" /> 
    </method> 
  </service> 
</schedule> 

 

La realizzazione è piuttosto semplice, una custom section nel file di configurazione,un Timer, il ThreadPool e un po' di reflection per assegnare i parametri ed invocare i proxy. 
Ovviamente essendo un servizio di Maintenance non mi sono preoccupato tanto delle performance, quindi la reflection andava benissimo ;).

Appena ultimato con alcune aggiunte (tipo poter impostare una chiamata giornaliera senza inseririe tutti i giorni, oppure eseguire un qualcosa ogni x minuti) posterò un po' di codice e perchè no il download.

Ciauuzz


Comments