2012-03-16 85 views
1

我已经完全为Silverlight应用程序使用双面消息解决方案。现在我想添加一个功能。当用户离开应用程序时,我想通过在退出前发送最后一条消息来通知服务器。在Silverlight应用程序中发送双面消息退出

我在应用程序退出事件期间尝试发送双工信息,但DuplexServiceClient已处于CommunicationState.Faulted状态。

我也尝试建立新的连接并发送消息。在客户端,一切似乎都没有问题,但根本没有发送任何消息。我使用Fiddler检查过两次。

App.Current.Exit += (s, e) => 
{ 
    var dsc = new DuplexServiceClient(_binding, new EndpointAddress("../Services/MyService.svc")); 
    dsc.SendToServiceAsync(new UserLeave()); 
}; 

关键的是,我需要通知用户离开该应用后立即服务器,所以超时或类似的解决方法是不够好,我在这种情况下。

有没有人有工作解决方案?

+0

也许与JavaScript和beforeunload事件的连接? – Silvermind 2012-03-16 10:18:26

+0

我已经试过了。在window.onbeforeunload事件处理程序中调用JavaScript中的'ScriptableMember'方法。它的工作原理与我在Application Exit事件期间调用它完全相同。 – 2012-03-16 11:04:33

+0

我在某处读到您的第二种方法不起作用,因为服务器必须处理由于客户端消失而无法完成的合同。你试过用新创建的wcfclient最后调用发送的方法是这样的:'[的ServiceContract] 接口IMyContract { [OperationContract的(IsOneWay =真)] 无效再见() }' – Silvermind 2012-03-16 19:24:39

回答

1

我在SO中发现类似主题here。 Aliostad的回答让我再次思考这个问题。你永远无法确定你会从客户那里得到他要离开的信号。所以我结束了超时的解决方案。

相关问题