Good Tip, got my 5!
As an alternative to your tip, when using generated proxies you could also add the logic to a partial class with the same name as the proxy class, see below.
public partial class MyGeneratedProxyClient : IDisposable
{
void IDisposable Dispose()
{
try
{
if (this.State == CommunicationState.Faulted)
this.Abort();
else
this.Close();
}
catch
{
this.Abort();
}
}
}