【问题标题】:Session Timeout for WPF application using WCF service使用 WCF 服务的 WPF 应用程序的会话超时
【发布时间】:2025-12-10 18:50:01
【问题描述】:

需要 WPF 应用程序的帮助..

应用程序使用 WCF 服务来允许用户登录并执行其他数据库事务。如果会话超时,客户端希望应用程序注销用户。

能够在表单加载事件上添加一个函数来检查用户是否已登录并显示超时消息并注销用户。

已经为表单创建了一个基类,并有一个可覆盖的表单 Onload 事件,如果用户登录,我可以使用此事件检查所有表单。

问题:

当用户在表单上并且当用户在表单上时会话超时。当用户单击会触发 WCF 服务调用的按钮或下拉菜单时,应用程序会因为会话超时而出错。

我要么必须验证用户是否登录了每个调用 WCF 服务的函数和控制事件。

有没有一种类似于网页加载事件的方法,它总是在页面上的每个事件上被调用,我们可以使用它让应用程序检查用户是否登录。

你的帮助会很有帮助

【问题讨论】:

    标签: wpf vb.net wcf


    【解决方案1】:

    您可以收听所有RoutedEvents,如下所示。但这将要求所有事件(我的意思是所有事件),因此您可以检查特定的RoutedEvents,例如Button.ClickEventComboBox.SelectionChanged

        public MainWindow()
        {
            InitializeComponent();
            RoutedEvent[] events = EventManager.GetRoutedEvents();
    
            if(events!=null)
            {
               foreach (RoutedEvent e in events)
                AddHandler(e, new RoutedEventHandler(GenericHandler),true);
             }
    
        }
    
        private void GenericHandler(object sender, RoutedEventArgs routedEventArgs)
        {
             if (routedEventArgs.RoutedEvent == ButtonBase.ClickEvent || 
                routedEventArgs.RoutedEvent == Selector.SelectionChangedEvent)
            {
                //Here you can check for if user is logged on or not. 
            }
    
        }
    

    【讨论】:

    • 感谢 Nit 的解决方案。只是想弄清楚这将如何使用 vb.net...似乎 routedEventArgs.RoutedEvent = Button.ClickEvent 在 vb.net 中不起作用并且还将地址分配给处理程序...尝试实现此代码在表单基类中,这样我就可以为应用程序中的所有表单提供此代码