【问题标题】:Call WCF method on Windows Shutdown sometimes fails在 Windows Shutdown 上调用 WCF 方法有时会失败
【发布时间】:2011-07-11 10:47:24
【问题描述】:

我有一个 WPF 应用程序,它在 Windows 关机(System.Windows.Application.Current.SessionEnding 事件)上异步调用 WCF 方法,然后关闭应用程序。但有时 WCF 方法永远不会到达服务器端。

我在客户端和服务器端都有日志,可以告诉我请求何时发出和完成。大多数时候它运行良好,我可以看到客户端的请求到达服务器,然后应用程序退出。但有时我只能看到客户端发出请求而永远无法到达服务器。

我认为问题可能是在关闭 Windows 的过程中,有时我的 WPF 应用程序的 WCF 请求是在网络连接已经关闭时发出的。这可能是原因吗?如果是,有什么解决方法吗?

谢谢

【问题讨论】:

  • 您能否等待关闭您的应用程序,直到您的 Completed 事件处理程序被服务器回调?

标签: windows wcf call shutdown


【解决方案1】:

如果您正在异步进行调用,那么它发生在后台线程上。

后台线程无法阻止应用程序关闭,并在应用程序关闭时终止。可能发生的情况是操作系统告诉您的应用程序它正在关闭 PC,您的应用程序尝试发出其异步请求但没有设法这样做,因为当应用程序关闭时,正在执行它的后台线程被杀死。这不一定会一直发生,但肯定会发生,因为没有任何东西可以确保线程保持活动状态。

您应该做的是显式创建一个新线程并使用它来同步调用您的服务。通过手动创建线程,您可以将其设置为前台线程;前台线程在完成之前不允许应用程序关闭。所以:

public void OnShutdown()
{
    var executionThread=new Thread(RunWcfMethod);
    executionThread.IsBackgroundThread=false;
    executionThread.Start();
}

private void RunWcfMethod()
{
    var serviceClient=new ShutdownServiceClient();
    serviceClient.NotifyServerOfShutdownSyncronously();
}

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2023-02-07
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多