2012-06-19 16 views
7

Bu, yine de, IIS altında çalışırken 256K yığın boyutu nedeniyle StackOverflow özel durumunun oluştuğu aynı sorgunun başka bir varyasyonudur. Bu sorun yeni bir şey değildir ve birkaç kez sorulmuştur (here ve here)IIS StackOverflow istisnası

Sorumu biraz farklı. Bir istemci bir veri istediğinde istisna atılır ve IIS 7 altında çalışan WCF servisi oldukça büyük bir nesne grafiğini serileştirmeye çalışır. Aslında kolayca çalıştırarak geliştirme ortamında sorunu yeniden

serileştirme sırasında oluşan bir sınırlı yığın boyutu ile dizisindeki rutini serialize/al:

static void Main(string[] args) 
{ 
    Thread t = new Thread(DoWork, 262144); 
    t.Start(); 
    t.Join(); 
    Console.ReadLine(); 
} 

private static void DoWork() 
{ 
    var dataAccess = new DataAccess(); 

    var data = dataAccess.LoadData(); 

    var serializer = new DataContractSerializer(typeof(List<Data>), null, int.MaxValue, false, true, new DataContractSurrogate()); 

    var memoryStream = new MemoryStream(); 
    serializer.WriteObject(memoryStream, data); 
} 

Bu gibi StackOverflow istisna simüle IIS'de. İş parçacığının yapıcısına 1MB'ye geçirilen stackSize parametresini değiştirdiğimde, iyi çalışıyor ...

Sorum, bir WCF hizmet yönteminin içinde bunu nasıl yapabilir? Başka bir deyişle, WCF servis yöntemimde açıkça bir serializer oluşturmama ve WriteObject'i arama. StackSize'i kontrol edebildiğim bir iş parçasında bu tür işleri nasıl/nerede yapabilirim?

Teşekkürler!

cevap

1

Yürütücünün PE üst bilgisini değiştirerek varsayılan yığın boyutunu değiştirebilirsiniz./Stack argümanı ile editbin.exe'yi kullanın. Bkz. http://msdn.microsoft.com/en-us/library/35yc2tc3(v=vs.80).aspx

+0

Hızlı yanıt için teşekkürler, ancak bu sorunu kodda çözmeyi tercih ediyorum. /bin anahtarı ile editbin.exe'yi denedim, ancak w3wp uygulaması system32 klasöründe olduğundan izin sorunlarıyla karşılaştım. Dosyayı güncelleyemedim. Ayrıca, IIS'de bir yama yüklemek veya güncellemek gerekirse, değişikliklerin üzerine yazılır. Programlı olarak nasıl çözülebileceği üzerine düşünceleriniz var mı? –

+0

@JohnRussell: İş parçacığının oluşturulmasını değiştiremeyeceğiniz izlenimi aldım. Bu durumda, farkında olduğum tek seçenek, resmi değiştirmek. Belki de kendi kendinize ev sahipliği yapacak ve IIS yerine bu ikili dosyayı değiştireceksiniz. –

+0

İş parçacığının oluşturulmasını değiştirebilirim, ancak IIS tarafından barındırılan bir işlemde nasıl veya nerede yapıldığı konusunda emin değilim. Bir seri hale getirici oluşturan ve WriteObject() öğesini çağıran açık bir ifade yoktur. –