如何关闭或关闭自我托管服务?

时间:2019-02-10 20:01:48

标签: c# wpf

我有一个托管服务的WPF应用程序,其背后的代码是:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        _host = new ServiceHost(typeof(GestorAplicacionesService));
        _host.Open();
    }
    private ServiceHost _host;
}

我了解到关闭服务是一种很好的做法,但是在这种情况下我不知道该怎么做?因为我有主窗口,所以如果我关闭应用程序,则可以在关闭事件中关闭服务。但是,如果有某些异常可能导致无法触发关闭事件的应用程序中断,则该服务将无法关闭。

因此,我想知道将其托管在wpf应用程序中时关闭服务的最佳方法是什么。

谢谢。

2 个答案:

答案 0 :(得分:1)

处理Closing事件并将其关闭。您可能还需要实现IDisposable接口,以应对一次性字段的最佳做法:

public sealed partial class MainWindow : Window, IDisposable
{
    private readonly ServiceHost _host = new ServiceHost(typeof(GestorAplicacionesService));

    public MainWindow()
    {
        InitializeComponent();

        _host.Open();
        Closing += MainWindow_Closing;
    }

    private void MainWindow_Closing(object sender, CancelEventArgs e)
    {
        Dispose();
    }

    public void Dispose()
    {
        _host.Close();
        _host.Dispose();
    }
}

这是您可以做的最好的事情。如果整个过程意外关闭,则WPF应用程序中无能为力。内存仍将返回到操作系统。

答案 1 :(得分:0)

您可以在app.xaml中检查所有内容

multipart/form-data

,对于线程问题,请点击以下链接:https://soumya.wordpress.com/2010/05/26/wcf-simplified-part-7-hosting-a-wcf-service-using-wpf/