Wcf 在Silverlight应用程序出口上发送双工消息

Wcf 在Silverlight应用程序出口上发送双工消息,wcf,silverlight,polling,duplex,Wcf,Silverlight,Polling,Duplex,我为Silverlight应用程序提供了完全可用的双工消息传递解决方案。现在我想给它添加一个特性。当用户离开应用程序时,我希望通过在退出前发送最后一条消息来通知服务器 我已尝试在应用程序退出事件期间发送双工消息,但DuplexServiceClient已处于CommunicationState.Faulted状态 我还尝试建立新的连接并发送消息。客户端似乎一切正常,但根本没有发送任何消息。我用小提琴检查了两次 App.Current.Exit += (s, e) => { var

我为Silverlight应用程序提供了完全可用的双工消息传递解决方案。现在我想给它添加一个特性。当用户离开应用程序时,我希望通过在退出前发送最后一条消息来通知服务器

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

我还尝试建立新的连接并发送消息。客户端似乎一切正常,但根本没有发送任何消息。我用小提琴检查了两次

App.Current.Exit += (s, e) =>
{
    var dsc = new DuplexServiceClient(_binding, new EndpointAddress("../Services/MyService.svc"));
    dsc.SendToServiceAsync(new UserLeave());
};
关键的是,我需要在用户离开应用程序后立即通知服务器,所以在这种情况下,超时或类似的解决方法对我来说不够好


有人有有效的解决方案吗

我在SO中发现了类似的话题。阿利奥斯塔德的回答让我再次思考这个问题。你永远不能确定你会从客户那里得到他要离开的信号。所以我最终找到了超时解决方案。

我在So中找到了类似的主题。阿利奥斯塔德的回答让我再次思考这个问题。你永远不能确定你会从客户那里得到他要离开的信号。因此,我最终得到了超时解决方案。

可能是与JavaScript的连接以及beforeunload事件?我已经尝试过了。从
窗口中的JavaScript调用
ScriptableMember
方法。onbeforeunload
事件处理程序。它的工作原理与我在应用程序退出事件期间调用它的工作原理完全相同。我在某个地方读到,您的第二个方法不起作用,因为服务器必须在进入时处理契约,而这一点无法完成,因为客户端已离开。您是否尝试过使用新创建的wcfclient将最后一个调用发送到如下方法:
[ServiceContract]接口IMyContract{[OperationContract(IsOneWay=true)]void Bye()
UserLeave()是单向操作吗?可能是与JavaScript的连接,并且在beforeunload事件中?我已经尝试过了。从
窗口中的JavaScript调用
ScriptableMember
方法。onbeforeunload
事件处理程序。它的工作原理与我在应用程序退出事件期间调用它的工作原理完全相同。我在某个地方读到,您的第二个方法不起作用,因为服务器必须在进入时处理契约,而这一点无法完成,因为客户端已离开。您是否尝试过使用新创建的wcfclient将最后一个调用发送到如下方法:
[ServiceContract]接口IMyContract{[OperationContract(IsOneWay=true)]void Bye()
UserLeave()是单向操作吗?