Проблема в том, что вы получаете исключение, которое покрывает ваше основное исключение, если вы получаете исключение при вызове dispose, который возможен. Я написал оболочку для таких сценариев, вы можете прочитать об этом в моем блоге: http://blog.tomasjansson.com/2010/12/disposible-wcf-client-wrapper/
Идея состоит в том, что у вас есть обертка вокруг канала, которая имеет дело со сценарием, если метод dispose выдает исключение.
Небольшой пример того, как вы должны использовать мою обертку:
public class ClientWrapperUsage : IYourInternalInterface
{
public IList<SomeEntity> GetEntitiesForUser(int userId)
{
using(var clientWrapper = new ServiceClientWrapper<ServiceType>())
{
var response = clientWrapper.Channel.GetEntitiesForUser();
var entities = response.YourListOfEntities.TranslateToInternal();
return entities;
}
}
}
Здесь я предположил, что существует существующий метод расширения для списка, который содержит сущность, возвращаемую службой, затем вы используете этот метод для преобразования его во внутренние сущности. Это на 100% проверяемое, по крайней мере, я думаю :). Просто поменяйте интерфейс IYourInternalInterface
везде, где вы не хотите подделывать сервис.