Domanda

Ho una classe che gestisce tutte le interazioni nella mia applicazione con il mio servizio WCF e sembra che MSDN dire che l'uso di utilizzo) _ dichiarazione con WCF è male - posso capire perché questo è un male e sono d'accordo con essa ( http://msdn.microsoft.com/en-us/library/aa355056.aspx)

il mio problema è che il loro metodo suggerito di implementazione vorrà dire che ho 10 metodi [AS 10 metodi pubblici in mio servizio] che avranno lo stesso codice di struttura e questo, naturalmente, non segue il principio DRY - il codice simile al seguente:

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (CommunicationException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (TimeoutException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (Exception ex)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
    throw;
}

Questo non ha alcuna registrazione ancora, ma, naturalmente, quando io venuto a iniziare la registrazione allora dovrò aggiungere il lavoro di registrazione in quasi 10 luoghi diversi

Qualcuno ha qualche consiglio su come posso essere un po 'più intraprendente qui nel riutilizzo del codice

grazie

Paul

È stato utile?

Soluzione

userei qualche generico, configurabile movimentazione componente che permette la manipolazione di elaborazione come registrazione di eccezione base eccezione, ri-lancio ecc essere disaccoppiato dal luogo effettivo di movimentazione. Un esempio di tale componente è un Exception Handling di Microsoft Application Block .

Poi si potrebbe finire con un codice come questo:

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}

dove CloseIfNeeded denota un metodo un'estensione personalizzata incapsulare la logica di chiusura del canale WCF, e il metodo eccezione Handle chiama il meccanismo di gestione eccezione, passando un nome del criterio eccezione che deve essere applicata in questo posto.

Nella maggior parte dei casi, è possibile ridurre la gestione delle eccezioni logica per una decente o due righe di codice, offrendo diversi vantaggi:

  • istante configurabilità del comportamento gestione delle eccezioni (politiche)
  • estensibilità con gestori di eccezioni personalizzate legate a specifici tipi di eccezioni e le politiche di eccezione
  • una migliore gestibilità e la leggibilità del codice
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top