WP7游戏:停用后调用Web服务(墓碑)

时间:2011-04-04 16:07:30

标签: wcf web-services windows-phone-7 xna tombstoning

我遇到了一个奇怪的问题,我想知道它是否正常,或者我是否遗漏了什么。

情况如下:

  1. 我正在XNA for WP7开发多人游戏
  2. 当用户退出游戏(进入墓碑或退出)时,我想警告其他玩家玩家离开
  3. 我覆盖了Game.OnExiting()方法来调用我的Web服务,我在此行上设置了一个断点
  4. 每次断点都会被点击,拨打电话,不会发生错误,但服务器永远不会接到电话
  5. 由于游戏正在退出,服务器上是否正在处理呼叫是否正常?

    以下是代码:

        protected override void OnExiting(object sender, EventArgs args)
        {
            if (GameManager.Instance.IsOnlineGame && !Guide.IsVisible)
            {
                GameManager.Instance.Multiplayer.QuitGame();
            }
    
            base.OnExiting(sender, args);
        }
    
        internal void QuitGame()
        {
            _client.QuitGameAsync(GameManager.Instance.GameId, _myRank);
        }
    

2 个答案:

答案 0 :(得分:3)

您的应用只有很短的时间才能退出时执行任何操作。调用Web服务可能比您允许的时间更长。

从您发布的代码数量来看,不清楚哪些资源可用于拨打电话(以及传递必要的数据)。

如果您这样做,则不应该依赖于发送到服务器的消息。这可能会对您的应用逻辑产生影响。

答案 1 :(得分:0)

科学解释:

  

从UI线程调度HttpWebRequests,因此如果您的应用/游戏UI线程在您退出游戏的呼叫后永远不会更新,则永远不会发送请求。您可以通过创建Web请求进行测试,然后循环直到请求完成(等待异步结果完成状态) - 请求永远不会被发送,您将永远等待。您可以尝试引入几百毫秒的延迟(不会将UI线程置于休眠状态,这仍会阻止请求)并查看是否发出了请求。在XNA中,这意味着对一些更新调用什么都不做,以查看是否发送了请求。你也可以使用计时器。

致谢:http://forums.create.msdn.com/forums/t/79737.aspx上的爸爸游戏