2012-03-28 17 views
1

スケジュールされた定期タスククラスから最初に、 という名前のWebServiceメソッドを呼び出すことはできますか? 7.1。メソッドを呼び出す際にnull参照例外が発生していますが、期待値をwebメソッドのパラメータに渡しています。 孤立したストレージから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のわずかに修正されたバージョンを使用してタイムアウトを追加しましたが、原則はあなたが呼び出しているサービスと同じです... t_UpdateLogCompletedの末尾までNotifyComplete()まで電話しないでください

次のコード例は次のとおりです。

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

解決済み:実際には、私のWebサービスをコンストラクタの新しいインスタンスに初期化するのを忘れました。さて、そのうまく動作します。ご協力いただきありがとうございます。 – user1105705

関連する問題