Aracılığıyla paylaş


AssemblyBinder rol örneği System.IO.IOException özel durumu atıyor

Bu makalede, Sıkıştırıcı uygulamasının AssemblyBinder rol örneğinin Meşgul ve Yeniden Başlatılıyor durumu arasında takılması ve System.IO.IOException özel durumu oluşturması ile ilgili sorunları giderme hakkında bilgi verilmektedir: Diskte yeterli alan yok.

Orijinal ürün sürümü: API Management Hizmeti
Özgün KB numarası: 4464907

Not

Azure Bulut Hizmeti Sorun Giderme Serisi makalesine bakın. Bu, laboratuvarın ikinci senaryosudur. Sorunu yeniden oluşturmak için Kompresör uygulaması için laboratuvar kurulum yönergelerini izlediğinize emin olun.

Belirtiler

Kompresör uygulamasının AssemblyBinder rol örneği, Azure portal dikey penceresinde aşağıdaki işlenmemiş özel durumu oluşturup Meşgul ve Yeniden Başlatma durumu arasında takılıyor.

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].

Sorun giderme adımları

Hata çağrısı yığınından, bu WorkerRole OnStart() yönteminde sıkıştırma veya ayıklama işlemi gerçekleştiriyor ancak yetersiz depolama nedeniyle başarısız oluyor gibi görünüyor. Aklınıza gelecek bir sonraki belirgin soru, tam olarak WaWorkerHost.exe işlemin dosyayı ayıkladığı yerdir.

Yanıtı bulmak için İşlem İzleyicisi aracını kullanarak ProcMon izlemesini alın ve neler bulabileceğinize bakın.

İşlem İzleyicisi'nde ProcMon izlemesinin ekran görüntüsü.

WaWorkerHost.exe işlem, varsayılan geçici dizininde bir dosya yazıyor. Bu, en fazla 100 MB boyuta sahip ve belirli bir noktada dolabilecek. RoleTemp dizinine gezindikten sonra, bu dizin için disk alanı kotasının gerçekten tükendiğini fark edebilirsiniz.

RoleTemp dizininin ekran görüntüsü.

Sorunun nedenini çözmüş olabilirsiniz, ancak RoleTemp konumunda alan tükenirken ne yapmalısınız? Cevabı burada bulabilirsiniz.

Bu nedenle, yerel bir depolama kaynağı yapılandırmalı ve TEMP ve TMP dizinlerini aşağıdaki gibi yerel depolama kaynağının yoluna işaret etmelisiniz:

Yerel kaynak bildirimi, AssemblyBinder rolü için hizmet tanımı dosyasına eklenmiş olmalıdır.

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

Bu değişiklik RoleEntryPoint.OnStart yönteminde gerçekleştirilmelidir.

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

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.