Это - немного вещи, которую мне нравится называть Интернетом
Прокси-серверы клиентской службы не могут быть повторно использованы после сбоя. Вы должны избавиться от старого и воссоздать новый.
Вы также должны убедиться, что правильно закрыли прокси-сервер клиентской службы. Прокси-сервер службы WCF может генерировать исключение при закрытии, и если это произойдет, соединение не будет закрыто, поэтому вы должны прервать его. Используйте шаблон "попробуйте {Close} / catch {Abort}". Также имейте в виду, что метод dispose вызывает close (и, следовательно, может генерировать исключение из dispose), поэтому вы не можете просто использовать using like с обычными одноразовыми классами.
Например:
try
{
if (yourServiceProxy != null)
{
if (yourServiceProxy.State != CommunicationState.Faulted)
{
yourServiceProxy.Close();
}
else
{
yourServiceProxy.Abort();
}
}
}
catch (CommunicationException)
{
// Communication exceptions are normal when
// closing the connection.
yourServiceProxy.Abort();
}
catch (TimeoutException)
{
// Timeout exceptions are normal when closing
// the connection.
yourServiceProxy.Abort();
}
catch (Exception)
{
// Any other exception and you should
// abort the connection and rethrow to
// allow the exception to bubble upwards.
yourServiceProxy.Abort();
throw;
}
finally
{
// This is just to stop you from trying to
// close it again (with the null check at the start).
// This may not be necessary depending on
// your architecture.
yourServiceProxy = null;
}
Существует блог статья об этом здесь