J'ai écrit une méthode d'extension à utiliser avec les services WCF qui conserve toute la logique de gestion des exceptions et des exceptions en un seul endroit. La méthode est la suivante:Appel du service WCF à l'aide de la méthode d'extension
public static TResult CallMethod<TChannel, TResult>(
this ClientBase<TChannel> proxy,
Func<TResult> func) where TChannel : class
{
proxy.ThrowIfNull("proxy");
func.ThrowIfNull("func");
try
{
// set client credentials
return func();
}
finally
{
if (proxy != null)
{
try
{
if (proxy.State != CommunicationState.Faulted)
{
proxy.Close();
}
else
{
proxy.Abort();
}
}
catch (CommunicationException)
{
proxy.Abort();
}
catch (TimeoutException)
{
proxy.Abort();
}
catch (Exception)
{
proxy.Abort();
throw;
}
}
}
}
La méthode sera utilisée comme ceci:
public int CreateBusinessObject(BusinessObject item)
{
MyServiceClient proxy = new MyServiceClient();
return proxy.CallMethod(() => proxy.CreateBusinessObject(item));
}
Ma question est de savoir si ce serait mieux comme méthode statique qui crée le proxy de service? Je suis un peu inquiet de ma mise en œuvre actuelle. La construction du proxy devrait-elle être dans le try/catch? Ma compréhension actuelle est que si le constructeur échoue, il n'y a rien à se débarrasser de toute façon.
Bon point. J'aurais dû savoir essayer quelque chose comme ça. Merci. –