2012-03-16 27 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的回答讓我再次思考這個問題。你永遠無法確定你會從客戶那裏得到他要離開的信號。所以我結束了超時的解決方案。

相關問題