2013-09-05 7 views
0

Je dois appeler certaines fonctions dans un service Web C# après avoir renvoyé le résultat à l'utilisateur, donc j'ai l'intention d'utiliser une méthode OneWay.Appel de service Web asynchrone dans C#

J'ai créé 2 webservices sur le même projet comme suit: 1er: le service de l'appelant:

public class Caller : System.Web.Services.WebService { 

[WebMethod] 
public string HelloWorld() { 

    var bg = new Background(); 
    bg.HelloWorldBG(); 
    return "Hello World"; 
} 
} 

2ème service à invoquaient en arrière-plan:

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required)] 
public class Background : System.Web.Services.WebService { 

[SoapDocumentMethod(OneWay = true)] 
[WebMethod(EnableSession = true)] 
public void HelloWorldBG() 
{ 
    Thread.Sleep(60000); 
    var file = @"D:\testHello.txt"; 
    File.WriteAllText(file, "Hello World"); 
}  

}

mais quand j'appelle HelloWorld() il ne retourne pas avant d'avoir terminé l'exécution de HelloWorldBG()

+1

Bien sûr, parce que vous êtes juste appeler une méthode (HelloWorld) d'une classe comme les autres (de perspective du compilateur, peu importe si sa classe de base est un service web). Utilisez threadpool pour l'appeler de manière asynchrone (ou Tâches si .NET 4+) –

+0

Pour tous les détails pour effectuer des services web asynchrones voir ce lien http://www.codeproject.com/Articles/121345/Asynchronous-Communication-in-a-WCF -Un service –

Répondre

1

Vous pouvez exécuter un thread séparé choisi de pool de threads en démarrant une nouvelle tâche avec votre méthode:

var bg = new Background(); 
Task.Factory.StartNew(bg.HelloWorldBG); 
return "Hello World"; 
Questions connexes