【问题标题】:Sending Duplex Message on Silverlight Application Exit在 Silverlight 应用程序退出时发送双工消息
【发布时间】: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


【解决方案1】:

我在 SO 中找到了类似的主题 here。 Aliostad 的回答让我再次思考这个问题。你永远不能确定你会从客户那里得到他要离开的信号。所以我最终得到了 timeout 解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多