WCF - Gestione delle eccezioni

Uno sviluppatore di servizi WCF potrebbe riscontrare alcuni errori imprevisti che richiedono la segnalazione al client in modo appropriato. Tali errori, noti comeexceptions, vengono normalmente gestiti utilizzando i blocchi try / catch, ma ancora una volta, questo è molto specifico per la tecnologia.

Poiché l'area di interesse di un client non riguarda il modo in cui si è verificato un errore o i fattori che contribuiscono a un errore, il contratto SOAP Fault viene utilizzato per comunicare il messaggio di errore dal servizio al client in WCF.

Un contratto Fault consente al cliente di avere una visione documentata degli errori verificatisi in un servizio. Il seguente esempio fornisce una migliore comprensione.

Step 1 - Viene creato un semplice servizio di calcolatrice con un'operazione di divisione che genererà eccezioni generali.

using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
   // NOTE: You can use the "Rename" command on the "Refactor" menu to change 
   // the interface name "IService1" in both code and config file together.
   
   [ServiceContract]
   
   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
      // TODO: Add your service operations here
   }
}

La codifica per il file di classe è mostrata di seguito:

Ora, quando proviamo a dividere il numero 10 per zero, il servizio di calcolatrice genererà un'eccezione.

L'eccezione può essere gestita dal blocco try / catch.

Ora, quando proviamo a dividere un numero intero per 0, restituirà il valore 10 perché lo abbiamo gestito nel blocco catch.

Step 2 - FaultException viene utilizzato in questo passaggio per comunicare le informazioni sull'eccezione al client dal servizio.

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Step 3- È anche possibile creare un tipo personalizzato per inviare il messaggio di errore utilizzando FaultContract. I passaggi essenziali per creare un tipo personalizzato sono menzionati di seguito:

Un tipo è definito dall'uso del contratto dati e vengono specificati i campi che devono essere restituiti.

L'operazione di servizio è decorata dall'attributo FaultContract. Viene specificato anche il nome del tipo.

Viene creata un'istanza del servizio per generare eccezioni e vengono assegnate proprietà di eccezione personalizzate.