2016-06-10 3 views
0

Ich arbeite derzeit an Windows 10 Hintergrundaufgaben und ich bin Benutzer Speicherort in meiner Datenbank speichern und Zeit Trigger verwenden, ich versuche, die gespeicherten Daten an den Server mit REST Webservice zu senden und ich verwende RestSharp.Portable API zu TU das. Nun, das Problem mit ist, dass die Anfrage nicht an den Server gesendet wird, wenn ich den Web-Service von Hintergrund Aufgaben aufrufen, aber wenn ich das gleiche im Vordergrund (in meinem Windows 10 Projekt) dann funktioniert es gut. Kann jemand vorschlagen, was ich falsch mache?Webservice in Time Trigger Hintergrund Aufgaben in UWP nicht funktionieren?

** My TimeTrigger Aufgabe

namespace TimerTask 
{ 
public sealed class TimeTriggerTask : IBackgroundTask 
{ 
    private ApplicationDataContainer userSettings = ApplicationData.Current.LocalSettings; 

    public async void Run(IBackgroundTaskInstance taskInstance) 
    { 
     DatabaseManager dbManager = new DatabaseManager(); 
     var location_records = dbManager.getLocationDetails(); 
     if (MCSManager.Instance.currentClientData == null) 
     { 
      ResourceContext resourceContext = ResourceContext.GetForViewIndependentUse(); 
      ResourceMap resourceMap = MCSExtensions.getResourceMap(); 
      MCSManager.Instance.currentClientData = await new JsonDataHandler().LoadJsonFileforBackgroundTask(resourceMap.GetValue("CLIENT_JSON_FILENAME",resourceContext).ValueAsString, typeof(ClientData)) as ClientData; 
     } 
     if (location_records !=null && location_records.Count>0) 
     { 
      Dictionary<string, object> contentDictionary = new Dictionary<string, object>(); 
      contentDictionary.Add("P_LOC_DATA", location_records); 
      contentDictionary.Add("P_LAST_LOC_LAT",location_records[location_records.Count-1].LATITUDE); 
      contentDictionary.Add("P_LAST_LOC_LNG", location_records[location_records.Count - 1].LONGITUDE); 
      contentDictionary.Add("P_LAST_LOC_UPDATE", location_records[location_records.Count - 1].DATE_TIME); 
      IRestResponse locationTrackingResponse = await new WebServiceUtility().CommonWebservice(new RequestDataGenerator().generateRequestDataForLocationTracking(contentDictionary)); 

      if (locationTrackingResponse.IsSuccess==true && locationTrackingResponse.RawBytes.Length>0) 
      { 
       byte[] decryptedbytes = WebserviceED.finaldecryptedresponse(locationTrackingResponse.RawBytes); 
       string responsejson = Encoding.UTF8.GetString(decryptedbytes, 0, decryptedbytes.Length); 
       JObject userInfo = JObject.Parse(responsejson); 
       string result = (string)userInfo["P_RESULT"]; 
       if(result !=null && result.Equals("1")) 
       { 
        dbManager.TruncateAllLocationTrackingData(); 
        Debug.WriteLine("Data deleted successfully"); 
       } 

      } 
     } 

     // simple example with a Toast, to enable this go to manifest file 
     // and mark App as TastCapable - it won't work without this 
     // The Task will start but there will be no Toast. 
     /*ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; 
     XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); 
     XmlNodeList textElements = toastXml.GetElementsByTagName("text"); 
     textElements[0].AppendChild(toastXml.CreateTextNode("My first Task - Yeah")); 
     textElements[1].AppendChild(toastXml.CreateTextNode("I'm a message from your background task!")); 
     ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));*/ 
    } 
} 

}

My Webservice Aufruf öffentlichen async Aufgabe CommonWebservice (string encryptedstring) { ResourceContext resourceContext = ResourceContext.GetForViewIndependentUse(); ResourceMap resourceMap = MCSExtensions.getResourceMap();

 var client = new RestClient(BaseUrl + resourceMap.GetValue("WEB_SERVICE_NAME",resourceContext).ValueAsString); 

     RestRequest request = new RestRequest(HttpMethod.Post); 

     byte[] encryptedbytes = System.Text.Encoding.UTF8.GetBytes(encryptedstring); 
     request.AddParameter("", encryptedbytes, ParameterType.RequestBody); 

     var response = await client.Execute(request); 

     return response; 
    } 

Ich habe bereits die Hintergrundaufgabe in meiner Anwendung registriert. Außerdem habe ich einen Vorschlag, Deferral hinzuzufügen, wenn wir async verwenden und abwarten.

+0

posten Sie bitte Ihren vollständigen Quellcode der Hintergrundaufgabe. Stellen Sie auch sicher, dass Sie die Aufgabe beim Start der App registriert – thang2410199

+0

@ Thang2410199 hinzugefügt meine Hintergrund Task-Code und ich habe es registriert. Bitte schlagen Sie auch vor, wo ich Deferral in meiner Hintergrundaufgabe hinzufügen sollte. –

Antwort

2

Die Anforderung wird nicht ordnungsgemäß ausgeführt, die Hintergrundaufgabe wird abgebrochen, bevor die Anforderung bearbeitet wird.

den folgenden Code zu Beginn Ihrer Aufgabe

//get deferral to make the call awaitable BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

und den folgenden Code zum

//Complete the task _deferral.Complete(); Ende hinzufügen

Sie können jederzeit Ihre Hintergrundaufgabe debuggen sicher zu machen, arbeite ok.

Verwandte Themen