【发布时间】:2012-03-16 10:14:37
【问题描述】:
我有适用于 Silverlight 应用程序的完整的双工消息传递解决方案。现在我想为其添加一项功能。当用户离开应用程序时,我想通过在退出前发送最后一条消息来通知服务器。
我尝试在应用程序退出事件期间发送双工消息,但DuplexServiceClient 已经处于CommunicationState.Faulted 状态。
我也尝试建立新连接并发送消息。客户端似乎一切正常,但根本没有发送任何消息。我使用 Fiddler 检查了两次。
App.Current.Exit += (s, e) =>
{
var dsc = new DuplexServiceClient(_binding, new EndpointAddress("../Services/MyService.svc"));
dsc.SendToServiceAsync(new UserLeave());
};
至关重要的是,我需要在用户离开应用程序后立即通知服务器,因此在这种情况下,超时或类似的解决方法对我来说不够好。
有人有可行的解决方案吗?
【问题讨论】:
-
可能是与 JavaScript 和 beforeunload 事件中的连接?
-
我已经试过了。在
window.onbeforeunload事件处理程序中从 JavaScript 调用ScriptableMember方法。它的工作方式与我在应用程序退出事件期间调用它的方式完全相同。 -
我在某处读到,您的第二种方法不起作用,因为服务器必须处理进入时的合同,而由于客户端已经消失,因此无法完成。您是否尝试过使用新创建的 wcfclient 将最后一次调用发送到这样的方法:
[ServiceContract] interface IMyContract { [OperationContract(IsOneWay = true)] void Bye() } -
UserLeave() 是单向操作吗?
标签: wcf silverlight polling duplex