J'ai un service WCF que j'appelle à partir d'un service Windows.
Le service WCF exécute un package SSIS, et ce package peut prendre un certain temps et je ne veux pas que mon service Windows doive attendre qu'il se termine.
Comment puis-je rendre mon appel de service WCF asynchrone? (ou est-ce asynchrone par défaut?)
Tous vos besoins seront satisfaits dans les articles suivants de MSDN:
Sur Visual Studio 2010, sur le Add Service Reference > click Advanced button > check the Generate Asynchronous Operations
case à cocher.
Après cela, les opérations Async seront ajoutées et disponibles pour votre usage.
Côté service:
[ServiceContract]
public interface IMyService
{
[OperationContract]
bool DoWork(int i);
}
Côté client:
[ServiceContract(Name = nameof(IMyService))]
public interface IMyServiceClient : IMyService
{
[OperationContract]
Task<bool> DoWorkAsync(int i);
}
le proxy WCF à l'intérieur de votre client (service Windows?) doit être spécifié lors de la création que vous souhaitez avoir des opérations asynchrones disponibles.
Vous pouvez modifier un proxy WCF existant en cliquant dessus avec le bouton droit de la souris et en choisissant "Configurer la référence de service". À partir d'ici, il vous suffit de cocher la case à côté de "Générer des opérations asynchrones"
Ok, c'est donc le côté proxy WCF des choses prises en charge. Vous devez maintenant utiliser APM (modèle de programmation asynchrone) avec le proxy à l'intérieur de votre client.