2016-04-17 4 views
1

Ich habe Stunden damit verbracht, dies zu debuggen, aber kein Glück. Ich verwende Mongo 3.2 mit dem C# -Treiber. Ich habe das Problem in eine vereinfachte Version reduziert, die das Problem immer noch anzeigt.Asp.net MongoDB ToListAsync() gibt nie zurück

Das Problem scheint zu sein, dass ToListAsync() nie zurückgibt. Ich habe versucht, die LoginHelper-Funktion zu synchronen ändern und überprüfen Sie den Wert von ToListAsync(). Ergebnis zu überprüfen, ob die Operation das richtige Dokument zurückgibt und es tut. Nicht sicher, warum diese asynchrone Version nicht funktioniert. Hier

ist der Code:

public partial class Login : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) {} 

    [System.Web.Services.WebMethod] 
    public static async Task<string> LoginUser(string username, string password) 
    { 
     string userId = await LoginHelper(username, password); 

     if (userId != "N/A") 
     { 
      //Do some stuff here 
     } 

     return userId; 
    } 

    public static async Task<string> LoginHelper(string userName, string password) 
    { 
     var client = new MongoClient("mongodb://localhost"); 
     var database = client.GetDatabase(_databaseName); 

     var collection = database.GetCollection<BsonDocument>("Users"); 

     //This is the trouble line 
     //If I remove this line the code will run fine and I'll see "N/A" returned in the JavaScript that calls LoginUser WebMethod 
     var documents = await collection.Find(new BsonDocument()).ToListAsync(); 

     //The code never reaches this point, the above await never returns 
     return "N/A"; 
    } 
} 
+0

Warum verwenden Sie nicht stattdessen FindAsync? –

Antwort

0

ich das Problem gelöst haben, indem einfach die Funktionalität in einem WCF-Webdienst zu bewegen, anstatt eine Web-Methode zu verwenden. Ich bin nicht sicher, warum das funktioniert, vielleicht sind Webmethoden in einer ASPX-Seite nicht mit Async kompatibel.

Verwandte Themen