Gewusst wie: Asynchrones Verwenden des CloseWorkbook-Methodenaufrufs
Letzte Änderung: Mittwoch, 24. März 2010
Gilt für: SharePoint Server 2010
Wenn Sie die Excel-Webdienste verwenden, hat es sich bewährt, die Arbeitsmappe durch Aufrufen der CloseWorkbook-Methode zu schließen, wenn Sie die Sitzung beenden möchten. Hierdurch wird die Sitzung geschlossen, und Excel Services kann Ressourcen auf vorhersagbare Weise freigeben. Hiermit lassen sich u. U. Serverleistung und -robustheit verbessern.
Jeder Webdienstaufruf benötigt jedoch Zeit. Je nachdem, wie der Server installiert ist, wie Sie auf ihn zugreifen und wie stark der Server beansprucht wird, kann der Aufruf irgendetwas zwischen 50 Millisekunden und 500 Millisekunden in Anspruch nehmen. Der Aufruf kann auch noch länger dauern; dies ist jedoch nur der Fall, wenn der Server sehr stark beansprucht wird.
Da ein gescheiterter Aufruf der CloseWorkbook-Methode keine Aktion nach sich zieht, müssen Sie nicht auf die Beendigung des Aufrufs warten, um festzustellen, ob er erfolgreich ist. Sie können den Aufruf daher normalerweise asynchron ausführen und Ausführungszeit sparen.
Hinweis |
---|
Wenn eine Anwendung einige Aufrufe an Excel Services ausgibt und dann beendet wird, kann es sich empfehlen, eine Arbeitsmappe nicht asynchron, sondern synchron zu schließen. In diesem Fall rufen Sie die CloseWorkbook-Methode anstelle der CloseWorkbookAsync-Methode auf, denn wenn Sie den Prozess unmittelbar nach dem Ausgeben eines asynchronen Aufrufs beenden, ist es möglich, dass der Aufruf nicht ankommt. |
Zum asynchronen Schließen der Arbeitsmappe sind zwei Dinge erforderlich:
Stellen Sie sicher, dass die Excel-Webdienste-Proxyklasse nicht gelöscht wird. Andernfalls ist es möglich, dass Excel Services-fremde Ausnahmebedingungen auftreten.
Rufen Sie die CloseWorkbookAsync-Methode anstelle der CloseWorkbook-Methode auf. Die Signatur für die CloseWorkbookAsync-Methode lautet wie folgt:
public void CloseWorkbookAsync(string sessionId)
Public Sub CloseWorkbookAsync(ByVal sessionId As String) End Sub
Sie müssen das Ereignis, das beim Aufrufen der CloseWorkbookAsync-Methode aufgerufen wird, nicht implementieren.
Sie finden die Signatur in der Datei Reference.cs im Projektverzeichnis Web References.
Hinweis |
---|
Sie finden die CloseWorkbookAsync-Methode in der Proxyklasse, die generiert wird, wenn Sie einen Webverweis mithilfe von Microsoft Visual Studio 2005 hinzufügen. Wenn Sie Visual Studio 2003 verwenden, rufen Sie stattdessen die BeginCloseWorkbook-Methode auf, um eine Arbeitsmappe asynchron zu schließen. |
Das Aufrufen der CloseWorkbookAsync-Methode oder der BeginCloseWorkbook-Methode bedeutet, dass der Aufruf zu Schließen einer Arbeitsmappe asynchron ausgeführt wird, sodass für die Anwendung keine signifikanter zeitlicher Aufwand entsteht.
Beispiel
Das folgende Beispiel zeigt, wie eine Arbeitsmappe asynchron mithilfe von Visual Studio 2005 geschlossen wird.
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();
}
}
}
Imports System
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols
Namespace SampleApplication
Friend Class Class1
<STAThread> _
Shared Sub Main(ByVal args() As String)
' Instantiate the Web service
' and create a status array object.
Dim es As New ExcelService()
Dim outStatus() As Status
Dim sheetName As String = "Sheet1"
' TODO: change the workbook path to
' point to workbook in a trusted location
' that you have access to.
Dim targetWorkbookPath As String = "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.
Dim sessionId As String = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
' Call the GetCell method
' to retrieve a value from a cell.
' The cell is in the first row and ninth column.
Dim rangeResult2() As Object = xlservice.GetCell(sessionId, sheetName, 0, 8, False, outStatus)
' Close the workbook asynchronously.
' This also closes session.
es.CloseWorkbookAsync(sessionId)
Catch e As SoapException
Console.WriteLine("SOAP Exception Message: {0}", e.Message)
Console.WriteLine("SOAP Exception Error Code: {0}", e.SubCode.Code.Name)
Catch e As Exception
Console.WriteLine("Exception Message: {0}", e.Message)
End Try
' Console.ReadLine();
End Sub
End Class
End Namespace
Robuste Programmierung
Stellen Sie sicher, dass Sie einen Webverweis auf eine Excel-Webdienste-Website hinzufügen, auf die Sie zugreifen können. Ändern Sie die using SampleApplication.ExcelWebService;-Anweisung, sodass sie auf die Webdienstsite zeigt, auf die Sie verweisen.
Nehmen Sie darüber hinaus ggf. Änderungen am Arbeitsmappenpfad, am Blattnamen usw. vor.
Siehe auch
Aufgaben
Gewusst wie: Abfangen von Ausnahmen
Gewusst wie: Festlegen eines Speicherorts als vertrauenswürdig
Gewusst wie: Speichern im Excel-Client auf dem Server
Gewusst wie: Verwenden der "SubCode"-Eigenschaft zum Abfangen von Fehlercodes