Fechando e descartando um serviço WCF
-
09-06-2019 - |
Pergunta
O Close
método em um ICommunicationObject
pode lançar dois tipos de exceções conforme descrito no MSDN aqui.Eu entendo por que Close
método pode lançar essas exceções, mas o que não entendo é por que o Dispose
método em um proxy de serviço chama o Close
método sem try
em torno dele.Não é seu Dispose
método o único lugar onde você deseja ter certeza de não lançar nenhuma exceção?
Solução
Parece ser um padrão de design comum no código .NET.Aqui está uma citação de Diretrizes de design de estrutura
Considere fornecer o método Close(), além de Dispose(), se close for a terminologia padrão na área.Ao fazer isso, é importante que você torne a implementação Close idêntica a Dispose...
Aqui está um postagem no blog no qual você pode encontrar uma solução alternativa para este problema de design System.ServiceModel.ClientBase
Outras dicas
Sim, normalmente Dispose é um dos lugares onde você deseja garantir que exceções não sejam lançadas.No entanto, com base neste MSDN tópico do fórum houve algumas razões históricas para esse comportamento.Como tal, o padrão recomendado é o paradigma try{Close}/catch{Abort}.