Procédure : utiliser l'appel de la méthode CloseWorkbook de façon asynchrone
Lorsque vous utilisez Services Web Excel, il est conseillé de fermer le classeur en appelant la méthode CloseWorkbook si vous avez terminé de travailler dans la session. La session est ainsi fermée et Services Excel peut libérer des ressources de façon prédictible. Cela peut améliorer les performances de votre serveur et sa fiabilité.
Toutefois, l'appel des services Web demande du temps. Selon le serveur installé, la façon dont vous y accédez et son taux d'utilisation, l'appel peut prendre entre 50 millisecondes et 500 millisecondes. Cela peut durer plus longtemps, mais uniquement si le serveur est très fortement occupé.
Étant donné qu'aucune action n'est possible sur l'appel à une méthode CloseWorkbook qui a échoué, il n'est pas nécessaire d'attendre la fin pour savoir si l'appel a abouti. Vous pouvez donc généralement effectuer l'appel de façon asynchrone et gagner ainsi du temps.
Notes
Si votre application appelle Services Excel puis se ferme, vous pouvez fermer un classeur de façon synchrone et non de façon asynchrone. Dans ce cas, vous devez appeler la méthode CloseWorkbook à la place de la méthode CloseWorkbookAsync. En effet, si vous quittez immédiatement le processus après avoir émis un appel asynchrone, il est fort probable que l'appel ne pourra pas aboutir.
Pour fermer le classeur de façon asynchrone, vous devez effectuer deux opérations :
Assurez-vous de ne pas déployer la classe proxy Services Web Excel. En cas de déploiement, des exceptions non-Services Excel risquent de se produire.
Appelez la méthode CloseWorkbookAsync à la place de la méthode CloseWorkbook. La signature de la méthode CloseWorkbookAsync est :
public void CloseWorkbookAsync(string sessionId)
Il n'est pas nécessaire d'implémenter l'événement appelé lorsque la méthode CloseWorkbookAsync est appelée.
Vous pouvez trouver la signature dans le fichier « Reference.cs » situé dans le répertoire de références Web de votre projet.
Notes
Vous pouvez trouver la méthode CloseWorkbookAsync dans la classe proxy générée lorsque vous ajoutez une référence Web en utilisant Microsoft Visual Studio 2005. Si vous utilisez Visual Studio 2003, vous devez appeler la méthode BeginCloseWorkbook pour fermer un classeur de façon asynchrone.
L'appel de la méthode CloseWorkbookAsync ou de la méthode BeginCloseWorkbook signifie que l'appel pour fermer le classeur sera exécuté de façon asynchrone et ne prendra pas beaucoup de temps à votre application.
Exemple
Le code exemple qui suit montre comment fermer un classeur de façon asynchrone en utilisant Visual Studio 2005.
using System;
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;
namespace SampleApplication
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
// Instantiate the Web service
// and create a status array object.
ExcelService es = new ExcelService();
Status[] outStatus;
string sheetName = "Sheet1";
// TODO: change the workbook path to
// point to workbook in a trusted location
// that you have access to.
string targetWorkbookPath =
"http://myserver02/example/Shared%20Documents/Book1.xlsx";
// Set credentials for requests.
es.Credentials =
System.Net.CredentialCache.DefaultCredentials;
try
{
// Call open workbook, and point to the trusted
// location of the workbook to open.
string sessionId = es.OpenWorkbook(targetWorkbookPath,
"en-US", "en-US", out outStatus);
// Call the GetCell method
// to retrieve a value from a cell.
// The cell is in the first row and ninth column.
object[] rangeResult2 = xlservice.GetCell(sessionId,
sheetName, 0, 8, false, out outStatus);
// Close the workbook asynchronously.
// This also closes session.
es.CloseWorkbookAsync(sessionId);
}
catch (SoapException e)
{
Console.WriteLine("SOAP Exception Message: {0}",
e.Message);
Console.WriteLine("SOAP Exception Error Code: {0}",
e.SubCode.Code.Name);
}
catch (Exception e)
{
Console.WriteLine("Exception Message: {0}", e.Message);
}
// Console.ReadLine();
}
}
}
Programmation fiable
Assurez-vous d'ajouter une référence Web à un site Services Web Excel auquel vous avez accès. Modifiez l'instruction using SampleApplication.ExcelWebService;
afin de pointer vers le site du service Web que vous référencez.
De plus, modifiez le chemin d'accès au classeur, au nom de la feuille, etc., selon le cas.
Voir aussi
Autres ressources
Accès à l'API SOAP
Alertes Excel Services
Problèmes connus et conseils relatifs à Excel Services
Appels SOAP de retour de boucle et liaison directe
Procédure pas à pas : développement d'une application personnalisée à l'aide des services Web Excel
Procédure : intercepter des exceptions
Procédure : approuver un emplacement
Procédure : approuver les emplacements des classeurs à l'aide de scripts
Procédure : enregistrer sur le serveur à partir du client Excel
Procédure : utiliser la propriété SubCode pour capturer des codes d'erreur