Quando è l'ultimo momento posso tornare un'eccezione a un client in WCF?
-
05-09-2019 - |
Domanda
Diciamo che ho questo in un'implementazione di IInstanceProvider:
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
try
{
unitOfWork.Commit();
}
catch (Exception)
{
unitOfWork.Rollback();
throw;
}
finally
{
unitOfWork.Dispose();
}
}
che buttare; non verrà mai restituito al cliente perché viene chiamato dopo che il servizio ha fatto il proprio lavoro ed è tornato dati al client, ed è quindi fatto. In quale altro modo posso restituire l'eccezione? O c'è un posto migliore per fare questo?
Soluzione
Credo che si sta cercando nel posto sbagliato per farlo. Credo che una scelta migliore sarebbe quella di implementare l'interfaccia IDispatchMessageInspector e allegarlo alla collezione esposta dalla proprietà MessageInspectors sul DispatchRuntime (attraverso un comportamento, più probabile).
Con questo, è possibile controllare i messaggi in arrivo e in uscita, e modificarli se necessario (che è come la vostra eccezione sarebbe realizzato, come un guasto nel messaggio di ritorno). A causa di questo, non si vogliono solo lasciare che l'eccezione bolla, ma piuttosto, si dovrebbe cambiarlo in un messaggio di errore e impostare il messaggio di ritorno a quello.
Altri suggerimenti
Non sono più familiarità con le operazioni in WCF come dovrei essere. Ciò che nel codice sopra restituisce i risultati al cliente? È il rollback?