2012-03-28 54 views
1

我們能否首先從計劃週期性任務類中調用webservice,如果是, 我們正嘗試使用windows phone中的計劃週期性任務代理類中的參數調用webservice方法7.1。雖然我正在將期望值傳遞給webmethod的參數,但在調用方法時獲取空引用異常。 正在從隔離存儲中檢索ID。在windows phone 7.1中調用計劃任務代理類中的web服務

以下是我的代碼。

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); 
    } 

有人請幫我解決上述問題。

回答

2

我以前做過這個沒有問題。您需要確保的一件事是,在您撥打NotifyComplete();之前,您需要等到異步讀取過程完成。

下面是我的一個應用程序示例。我不得不刪除大部分邏輯,但它應該告訴你流程如何。這使用稍微修改版本的WebClient,其中我添加了Timeout,但其原理與您要撥打的服務的原理相同...不要撥打NotifyComplete()直到t_UpdateLogCompleted的末尾

下面是示例代碼:

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(); 

    } 
+0

解決:其實我忘了初始化我的webservice到構造函數中的新實例。現在,它的工作很好。謝謝你的幫助。 – user1105705 2012-03-29 09:45:43