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

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

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

  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 ]

3 голосов
/ 04 апреля 2011

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

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

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

0 голосов
/ 05 апреля 2011

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

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

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

...