C# 在C中引发异常时调用服务的析构函数#

C# 在C中引发异常时调用服务的析构函数#,c#,wcf,c#-4.0,exception-handling,C#,Wcf,C# 4.0,Exception Handling,我有一个WCF服务,它使用异常返回错误的结果。例如,当方法的参数错误时,将引发异常并将异常发送给客户端,客户端将捕获该异常并显示其消息。我也使用FaultException。但问题是,当引发异常时,服务类的析构函数没有被调用。发生异常时,我必须在析构函数中处置存储库。我怎么做 public class TestService : ITestService { private AccountReposiory _accountReposiory; public TestServi

我有一个WCF服务,它使用异常返回错误的结果。例如,当方法的参数错误时,将引发异常并将异常发送给客户端,客户端将捕获该异常并显示其消息。我也使用FaultException。但问题是,当引发异常时,服务类的析构函数没有被调用。发生异常时,我必须在析构函数中处置存储库。我怎么做

public class TestService : ITestService
{
    private AccountReposiory _accountReposiory;

    public TestService()
    {
        Console.WriteLine("Started!");

        _accountReposiory = new AccountReposiory();
    }

    public void DoWork()
    {
        //Exception Occurred!;

        throw new Exception("Some Exception");

        //...
    }

    ~TestService()
    {
        Console.WriteLine("Finished!");

        _accountReposiory.Dipose();
    }
}

不要使用析构函数,因为.NETC#是托管语言

GC类在初始化任何类时自动调用

使用

try{ Console.WriteLine("Exception Occurred!"); }catch(Execption ex){ return; } try{ Console.WriteLine("Exception Occurred!"); }catch{ } 试一试{ WriteLine(“发生异常!”); }捕获(执行选项ex){ 返回; } 试一试{ WriteLine(“发生异常!”); }抓住{ }
块来解决这个问题。不要使用析构函数。我认为它可能会帮助您

进行清理总是一件好事,除非在不需要的时候,而且如果它会给您的代码增加很多开销

在您的情况下,我假设您希望确保该类在使用后由于使用了非托管系统资源而被销毁。在这种情况下,可能会帮助您:

如果您没有使用非托管系统资源,则可以将清理工作留给垃圾收集器