Que pensez-vous de cette approche:gestion des exceptions personnalisée dans le service WCF et le client
aide de défaut:
[Serializable]
public class WcfHwServiceFault
{
private readonly Guid _guid;
private readonly byte[] _data;
private WcfHwServiceFault(Guid guid, byte[] data)
{
_guid = guid;
_data = data;
}
public static WcfHwServiceFault Create(Exception ex)
{
var formatter = new SoapFormatter(null, new StreamingContext(StreamingContextStates.CrossMachine));
var ms = new MemoryStream();
formatter.Serialize(ms, ex);
return new WcfHwServiceFault(ex.GetType().GUID, ms.GetBuffer());
}
public Exception Get()
{
var formatter = new SoapFormatter(null, new StreamingContext(StreamingContextStates.CrossMachine));
var ms = new MemoryStream(_data);
return (Exception)formatter.Deserialize(ms);
}
}
utilisation côté serveur:
try
{
...
}
catch (Exception ex)
{
throw new FaultException<WcfHwServiceFault>(WcfHwServiceFault.Create(ex));
}
Utilisation côté client:
try
{
Channel.DoSomeMethod(...);
}
catch (FaultException<WcfHwServiceFault> ex)
{
throw ex.Detail.Get();
}
catch (CommunicationException ex)
{
throw new ApplicationException("Communication error.", ex);
}
À quoi cela sert-il? Et pourquoi utilisez-vous 'ApplicationException'? Tu ne sais pas que tu ne dois plus utiliser ça? En outre, quelle est la raison de l'utilisation de la sérialisation à l'exécution? Que faire si l'exception n'est pas sérialisable? Aviez-vous un vrai problème que vous essayiez de résoudre? –
2 PostMan: Ce code est compilable et exécutable: catch (FaultException ex) { throw ex.Detail.Get(); Catch (CommunicationException ex) { throw new ApplicationException ("Erreur de communication.", Ex); } –
SeeSharp
2 John Saunders: 1. Le client utilise une logique métier sur des interfaces communes et un ensemble d'exceptions appropriées (local). 2. Ensuite, nous ajoutons un proxy sur wcf, mais le client comme précédemment utilise les mêmes interfaces et exceptions. 3. Toutes les exceptions de logique métier seront sérialisables, mais je pense que vous posez de très bonnes questions. Merci. PS Désolé, si mon anglais n'est pas clair. – SeeSharp