Игра WP7: при отключении вызывать веб-сервис (надгробие)

У меня странная проблема, и я хочу знать, нормально ли это, или я что-то упускаю.

Вот ситуация:

  1. Я разрабатываю многопользовательскую игру в XNA для WP7
  2. Когда пользователь выходит из игры (входит в надгробие или выходит), я хочу предупредить других игроков о том, что игрок ушел
  3. Я отменяю Game.OnExiting() метод для вызова моего веб-сервиса, и я поставил точку останова на этой строке
  4. Каждый раз, когда точка останова получает удар, звонок сделан, ошибки не происходит, но сервер никогда не получает звонок

Это нормально, что вызов не обрабатывается на сервере из-за выхода из игры?

Вот код:

    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 ответа

Решение

Научные объяснения:

HttpWebRequests отправляются из потока пользовательского интерфейса, поэтому, если ваш поток приложения / игры никогда не обновляется после вашего вызова, чтобы выйти из игры, запрос никогда не будет отправлен. Вы можете проверить это, создав веб-запрос и затем зацикливаясь до тех пор, пока запрос не будет завершен (ожидание состояния завершения асинхронного результата) - запрос никогда не будет отправлен, и вы будете ждать вечно. Вы можете попробовать ввести задержку в несколько сотен миллисекунд (не переводя поток пользовательского интерфейса в спящий режим, который все равно заблокирует запрос) и посмотреть, выполнен ли запрос. В XNA это означало бы ничего не делать для нескольких обновлений, чтобы посмотреть, отправлен ли запрос. Вы также можете использовать таймер.

Кредиты: dadoo Games на http://forums.create.msdn.com/forums/t/79737.aspx

Ваше приложение имеет очень короткое время для выполнения каких-либо операций при выходе. Вызов веб-сервиса может занять больше времени, чем вам может быть разрешено.

Из количества отправленного вами кода не ясно, какие ресурсы доступны для совершения звонка (и передачи необходимых данных).

Если вы делаете это, вы не должны полагаться на то, что сообщение отправлено на сервер. Это может иметь значение для вашей логики приложения.

Другие вопросы по тегам