Unable

2016-05-03 17 views
1
[WebMethod] 
public static string LoadAccount() 
{ 
    address = new EndpointAddress(objClientSession.ServiceURL); 
    proxy = new PMToolServices.MyAppServiceClient(binding, address); 

    //Now call the web service to get the accounts 
    proxy.wsGetAccountsCompleted += new EventHandler<MyAppServices.wsGetAccountsCompletedEventArgs>(proxy_wsGetAccountsCompleted); 
    proxy.wsGetAccountsAsync(); 
    return strAccountList; 
} 

Ich rufe LoadAccount WebMethod ajax im ersten Versuch unter Verwendung von Daten von Ajax-Funktionsaufruf von WCF-Dienst zu bekommen. In habe ich Rückruf proxy_wsGetAccountsCompleted zu von WCF hinzugefügt. In proxy_wsGetAccountsCompleted Ich baue Ergebnis, um zu LoadAccount zurückzukehren. Probleme:Unable

  • Ich bin nicht in der Lage Ergebnis zurückzukehren direkt von ‚proxy_wsGetAccountsCompleted‘ so habe ich das Ergebnis in global definierten Zeichenfolge gespeichert und dann am Ende des LoadAccout WebMethod dass zurückkehren. Kann ich das direkt von proxy_wsGetAccountsCompleted zurückgeben.

  • Wenn ich LoadAccountWebMethod erste Mal aufrufen, es leeres Ergebnis zurückgibt, und wenn ich das zweite Mal wieder rufe, dann bekomme ich das richtige Ergebnis. Obwohl ich als Sequenz die global definierte Zeichenkette nach proxy_wsGetAccountsCompleted darüber zurückschicke. Ist das richtig?

Verwirrt über Sequenz/return Reaktion zwischen:

  • proxy.wsGetAccountsAsync();
  • proxy_wsGetAccountsCompleted();
  • Rückkehr strAccountList

Antwort

1

Sie etwas zu tun, sind seltsam: eine wcf Operation aufrufen, die synchonous ist, dass ein asynchrone Operationen aufruft. Natürlich wird es das erste Mal nicht funktionieren.

LoadAccount() gibt vor dem Abrufen des wsGetAccountsAsync() -Ergebnisses zurück. Sie können wsGetAccountsAsync entweder synchron aufrufen oder eine asynchrone Operation verwenden, z. B. mit Signal R.

Denken Sie daran, wenn Sie die Operation zum zweiten Mal aufrufen, erhalten Sie das Ergebnis einer vorherigen Anfrage, wenn Ihre Methode einen Parameter akzeptiert hat. Sie werden einen falschen Wert speichern, das ist die Antwort für Ihre vorherige Anfrage.