2016-11-17 7 views
0

Ich muss einen Webservice anrufen, also habe ich den Webservice als Webreferenz hinzugefügt und kann ihn aufrufen. Jetzt muss ich diesen Aufruf asynchron ausführen, da viele Daten heruntergeladen werden müssen und viel Zeit benötigt wird. Ich habe versucht, die async/await-Methode zu verwenden, aber ich kann dies nicht tun, da die Methode im Webservice nicht asynchron ist.Webservice asynchron aufrufen

Originalcode:

public static void validateLogin(JsonParameters _param, ref ValidateCredentials result, ref string excep_error) 
    { 
     var _mobileService = new MobileService(); 
     _mobileService.Url = AppParam.IISSTRING + "/UrlAddressReference"; 
     try 
     { 
      result = _mobileService.downloaddata(_param); 
     } 
     catch (Exception ex) 
     { 
      excep_error = ex.Message; 
     } 

    } 

Ich versuchte async Aufgabe anstelle von Leere zu machen, das Verfahren async, aber wie kann ich warten auf die Antwort webservice hinzufügen?

Nachdem ich den Webservice als Web-Referenz hinzugefügt habe, kann ich sehen, dass es für jede Methode eine asynchrone Methode und ein abgeschlossenes Ereignis erstellt hat. Wie kann ich sie nutzen? (Beispiel: downloaddata", a method name downloaddataasync`, und ein Ereignis "downloaddatacompletted")

Gibt es eine Möglichkeit dies zu tun oder muss ich den Webservice ändern?

+1

Was die Umsetzung des 'MobileService.downloaddata' Aufruf sieht wie, denn das ist, wo dies als wahrscheinlich aus starten mehr benötigen würde. –

Antwort

0
public async static Task validateLogin(JsonParameters _param, ref ValidateCredentials result, ref string excep_error) 
     { 
      await Task.Run(()=> 
      { 
      var _mobileService = new MobileService(); 
      _mobileService.Url = AppParam.IISSTRING + "/UrlAddressReference"; 
      try 
      { 
       result = _mobileService.downloaddata(_param); 
      } 
      catch (Exception ex) 
      { 
       excep_error = ex.Message; 
      } 
     }); 
} 
+0

Ich frage mich, was die unten Stimme für speziell war ... –

+0

Ich möchte auch –

+0

diese Methode wissen, arbeitet für mich, Ihnen danken –

0

Wenn Sie async verwenden möchten/await, der richtige Ansatz ist, wie Sie vorgeschlagen: die validateLogin Die Methode public static async Task validateLoginAsync(...) ändern, ruft validateLogin geändert werden muss, und das man es nennen, usw.

Es kann möglich für Sie AsyncContext oder NotifyTaskCompletion als Krücke verwenden (von https://github.com/StephenCleary/AsyncEx/wiki/AsyncContext) Sie können jedoch nach wie vor ein Background oder ähnliches Konstrukt wie auch verwenden müssen.

1

Nachdem ich die Webservice als Web-Referenz hinzugefügt kann ich sehen, dass es für jede Methode in ihm ein Verfahren und async abgeschlossen Ereignis erstellt. Wie kann ich sie nutzen?

Das sind EAP Mitglieder. Sie müssen write TAP wrappers for those EAP members; dann können Sie wie gewohnt async/await verwenden.

Verwandte Themen