вызов веб-службы из класса агента запланированных задач в Windows Phone 7.1 - PullRequest
1 голос
/ 28 марта 2012

Можем ли мы сначала вызвать веб-сервис из класса запланированных периодических задач, если да, я пытаюсь вызвать метод веб-сервиса с параметрами в классе агента запланированных периодических задач в Windows Phone 7.1.я получаю исключение нулевой ссылки при вызове метода, хотя передаю ожидаемые значения в параметры для веб-метода.извлекаю идентификатор из изолированного хранилища.

Ниже приведен мой код.

 protected override void OnInvoke(ScheduledTask task)
    {
        if (task is PeriodicTask)
        {
            string Name = IName;
            string Desc = IDesc;
            updateinfo(Name, Desc);
        }
    }



public void updateinfo(string name, string desc)
    {
        AppSettings tmpSettings = Tr.AppSettings.Load();
        id = tmpSettings.myString;
        if (name == "" && desc == "")
        {
            name = "No Data";
            desc = "No Data";
        }
        tservice.UpdateLogAsync(id, name,desc);
        tservice.UpdateLogCompleted += new EventHandler<STservice.UpdateLogCompletedEventArgs>(t_UpdateLogCompleted);
    }

Кто-то, пожалуйста, помогите мне решить вышеуказанную проблему.

1 Ответ

2 голосов
/ 28 марта 2012

Я делал это раньше без проблем. Единственное, в чем вы должны убедиться, это дождаться завершения процессов асинхронного чтения, прежде чем вызывать NotifyComplete();.

Вот пример из одного из моих приложений. Мне пришлось удалить большую часть логики, но она должна показать вам, как идет процесс. При этом используется слегка измененная версия WebClient, где я добавил Timeout, но принципы те же, что и у службы, которую вы вызываете

Вот пример кода:

    private void UpdateTiles(ShellTile appTile)
    {
        try
        {
            var wc = new WebClientWithTimeout(new Uri("URI Removed")) { Timeout = TimeSpan.FromSeconds(30) };
            wc.DownloadAsyncCompleted += (src, e) =>
            {

                try
                {
                     //process response 
                }
                catch (Exception ex)
                {
                    // Handle exception
                }
                finally
                {
                    FinishUp();
                }
            };


            wc.StartReadRequestAsync();
   }



    private void FinishUp()
    {
#if DEBUG
        try
        {
            ScheduledActionService.LaunchForTest(_taskName, TimeSpan.FromSeconds(30));
            System.Diagnostics.Debug.WriteLine("relaunching in 30 seconds");
        }
        catch (Exception ex)
        {

            System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
#endif
        NotifyComplete();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...