Eine UCMA 3.0-Endpunktanwendung löst eine nicht behandelte Laufzeitausnahme in Lync Server 2010 aus
Symptome
Angenommen, Sie entwickeln eine Anwendung mithilfe von Microsoft Lync Server 2010, Unified Communications Managed API 3.0 (UCMA3.0). Die UCMA-Anwendung erstellt einen Anwendungsendpunkt und einen Benutzerendpunkt. Wenn der Endpunkt mehrere Stunden lang in einer Lync Server 2010-Umgebung ausgeführt wird, löst die Anwendung eine nicht behandelte Laufzeitausnahme aus.
Ursache
Dieses Problem tritt aufgrund eines bekannten Fehlers auf. Der Fehler wird ausgelöst, wenn der Benutzerendpunkt und der Anwendungsendpunkt auf derselben Plattform erstellt werden, auf der die Inband-Abfrage aktiviert ist.
Auflösung
Um dieses Problem zu beheben, installieren Sie das folgende kumulative Update:
2500449 Beschreibung des kumulativen Updates für Lync Server 2010, Unified Communications Managed API 3.0 Runtime: November 2011
Problemumgehung
Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:
Sie können die ProvisioningDataQueryDisabled-Eigenschaft auf true setzen. Dadurch wird die Inband-Abfrage deaktiviert.
Da UCMA stark asynchron ist, werden manchmal Ausnahmen von einem Arbeitsthread ausgelöst.
Wenn eine Ausnahme von einem Arbeitsthread ausgelöst wird, der von UCMA verwendet wird, und die Ausnahme nicht in diesem Arbeitsthread behandelt wird, wird die Ausnahme nicht abgefangen. Dieses Problem tritt auch auf, wenn die Anwendung über eine „Try or Catch"-Funktion zur Behandlung dieser Art von Ausnahme verfügt. Dieses Problem tritt auf, weil die Ausnahme im Thread-Kontext des UCMA-Worker-Threads und nicht im Thread-Kontext des Benutzercodes mit dem Namen UCMA auftritt.
Um die Ausnahme zu behandeln, verfügt UCMA über einen Ausnahmehandler (die UnhandledExceptionManager-Klasse), der im Anwendungscode für nicht behandelte Ausnahmen in Arbeitsthreads registriert werden kann.
Das folgende Codebeispiel zeigt, wie ein UnhandledThreadPoolException-Handler-Delegat bei der UnhandledExceptionManager-Klasse registriert wird, indem die VerifyAndIgnoreUnhandledThreadPoolException-Eigenschaft festgelegt wird:// UnhandledExceptionManager-Klasse konfigurieren, um nicht abgefangene Ausnahmen zu protokollieren
UnhandledExceptionManager.VerifyAndIgnoreUnhandledThreadPoolException = this.LogAndIgnoreUncaughtExceptions;Die Delegateninstanz ist die LogAndIgnoreUncaughtExceptions-Methode der aufrufenden Klasse. Das folgende Codebeispiel zeigt, wie die Ausnahme ignoriert wird, nachdem Sie sie protokolliert haben:
bool LogAndIgnoreUncaughtExceptions(Ausnahme ex, WaitCallback-Methode, Objektstatus)
{
System.Diagnostics.Trace.WriteLine(ex.ToString());
return true;
}Hinweis Nach der Registrierung des Ereignisses übergibt UCMA alle nicht behandelten Ausnahmen von Arbeitsthreads an dieses Ereignis. Dadurch wird verhindert, dass die Anwendung aufgrund dieser nicht behandelten Ausnahme abstürzt.
Mehr Informationen
Weitere Informationen zur ApplicationEndpoint.ProvisioningDataQueryDisabled-Eigenschaft finden Sie auf der folgenden Microsoft-Website:
Allgemeine Informationen zur ApplicationEndpoint.ProvisioningDataQueryDisabled-Eigenschaft Weitere Informationen zur UnhandledExceptionManager-Klasse finden Sie auf der folgenden Microsoft-Website:
Allgemeine Informationen zur UnhandledExceptionManager-Klasse
No comments:
Post a Comment