Freigeben über


Die AssemblyBinder-Rolleninstanz löst die Ausnahme "System.IO.IOException" aus.

Dieser Artikel enthält Informationen zur Behandlung von Problemen, bei denen die AssemblyBinder-Rolleninstanz der Kompressor-Anwendung zwischen Beschäftigt und Neustartzustand hängen bleibt und system.IO.IOException-Ausnahme auslöst: Auf dem Datenträger ist nicht genügend Speicherplatz vorhanden.

Ursprüngliche Produktversion: API-Verwaltungsdienst
Ursprüngliche KB-Nummer: 4464907

Notiz

Lesen Sie den Artikel zur Azure Cloud Service Troubleshooting Series, dies ist das zweite Szenario des Labors. Stellen Sie sicher, dass Sie die Laboreinrichtungsanweisungen für die Kompressor-Anwendung wie folgt befolgt haben, um das Problem neu zu erstellen.

Symptome

Die AssemblyBinder-Rolleninstanz der Kompressor-Anwendung löst die nachstehende unbehandelte Ausnahme im Azure-Portal Blatt aus und bleibt zwischen Beschäftigt und Neustartzustand hängen.

Unhandled Exception: There is not enough space on the disk. at System.IO.__Error.WinIOError  (Int32 errorCode, String maybeFullPath) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at Ionic.Zip.ZipEntry.ExtractAndCrc(Stream archiveStream, Stream targetOutput, Int16 compressionMethod, Int64 compressedFileDataSize, Int64 uncompressedSize) at Ionic.Zip.ZipEntry.ExtractToStream(Stream archiveStream, Stream output, EncryptionAlgorithm encryptionAlgorithm, Int32 expectedCrc32) at Ionic.Zip.ZipEntry.InternalExtractToBaseDir(String baseDir, String password, ZipContainer zipContainer, ZipEntrySource zipEntrySource, String fileName) at Ionic.Zip.ZipFile._InternalExtractAll(String path, Boolean overrideExtractExistingProperty) at AssemblyBinder.WorkerRole.OnStart() in D:\compressor\AssemblyBinder\WorkerRole.cs:line 56 at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge. <InitializeRole> b__0() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()'[2018-08-12T14:47:25Z] Last exit time: [2018/08/12, 14:47:25.965].

Problembehandlungsschritte

Aus dem Fehleraufrufstapel sieht es so aus, als ob dieses WorkerRole einige Entpack- oder Extraktionsvorgänge bei der OnStart() -Methode ausführt, aber aufgrund unzureichender Speicherfehler fehlschlägt. Die nächste offensichtliche Frage, die Ihrem Kopf kommt, ist, wo genau WaWorkerHost.exe Prozess die Datei extrahiert.

Um die Antwort zu ermitteln, verwenden Sie das Tool "Prozessmonitor ", um eine ProcMon-Ablaufverfolgung zu erstellen und zu sehen, was Sie finden können.

Screenshot der ProcMon-Ablaufverfolgung im Prozessmonitor.

WaWorkerHost.exe Prozess schreibt eine Datei in ihrem temporären Standardverzeichnis mit einer maximalen Größe von 100 MB, die zu einem bestimmten Zeitpunkt voll werden kann. Wenn Sie zum RoleTemp-Verzeichnis navigieren, stellen Sie möglicherweise fest, dass das Speicherplatzkontingent für dieses Verzeichnis in der Tat erschöpft ist.

Screenshot des RoleTemp-Verzeichnisses.

Möglicherweise haben Sie die Ursache des Problems ermittelt, aber was sollten Sie tun, wenn der Speicherplatz am RoleTemp-Speicherort nicht mehr verfügbar ist? Hier ist die Antwort.

Daher sollten Sie eine lokale Speicherressource konfigurieren und die Verzeichnisse TEMP und TMP auf den Pfad der lokalen Speicherressource wie unten verweisen:

Die lokale Ressourcendeklaration muss der Dienstdefinitionsdatei für die AssemblyBinder-Rolle hinzugefügt worden sein.

<?xml version="1.0" encoding="UTF-8"?>
<LocalResources>
   <LocalStorage name="FileStorage" cleanOnRoleRecycle="true" sizeInMB="200" />
</LocalResources>

Führen Sie diese Änderung in der RoleEntryPoint.OnStart -Methode durch.

localResource = RoleEnvironment.GetLocalResource("FileStorage");
Environment.SetEnvironmentVariable("TMP", localResource.RootPath);
Environment.SetEnvironmentVariable("TEMP", localResource.RootPath);

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.