Probléma

Napok óta kavarog előttem ez az üzenet a legváltozatosabb időpontokban, kedvenc Visual Studio + TFS kombóm szórakoztat vele. A hibát elvben már a VS 2012 Update 2-vel kijavították, nekem mégis jövöget…

Elkezdtem mélyen utánanézni miért is van ez, hisz az, hogy egy-egy művelet után várok 1-2 percet (nem vicc!) az már nem is kicsit zavaró. Nos a hiba okai közül – bár megnéztem – a VS2012 által adottakat kizártam, s meglepetésemre az alábbi maradt talpon:

A szerver és a kliens oldal versenyhelyzete, amikor a szerver lassan válaszol és/vagy a kliens valamiért meg tudja előzni a szerver válaszát. (hihi ez áll, SSD mellett)

Ez a helyzet erőteljesen megnövekvő eséllyel jelentkezik, ha valaki 50000 elem felett kezel egy-egy solution-n belül (nu itt a szövegek eltértek, ki solution-t ki meg projektet mondott). A leírások szerint – ez persze a patternből fakad – ez az MVC4 projekteknél jön ki. Tekintettel arra, hogy én épp php portált kezelek most, ezen számot ha meg nem is haladom de közelítem.

Megoldás

A legjobb megoldás amíg lehet a szerver válaszadási kapacitást növelni több TFS szerver beállításával. Ha ez nem megoldható – haha a TFService kevés 🙂 – akkor a munkaterület beállításai alatt a Location kapcsolót kell Local-ról Server-re állítani. Ettől kezdve a szerver lesz a mérvadó tároló és a versenyhelyzet nem jön létre…

tfs_workspace

vs2013previewA most megjelent előzetes verziókból engem – gondolom sokakkal szemben – a Visual Studio új változata érdekelt leginkább. Letölteni már az első nap letöltöttem, de egyéb okok miatt csak most tudtam telepíteni.

Akinek nincs meg a telepítő, az letöltheti a http://www.microsoft.com/visualstudio/eng/2013-downloads címről.
Innen mindenki a számára érdekes verziót töltheti le, én az Ultimate verziót töltöttem le (az Ultimate verzió tartalmazza a Blend-et is).

More »

Régóta küzdök és tolom a kódot MVC pattern alatt, s alapszinten (nem túlzásba vitten) próbálom is követni merre megy a világ. Az egyik melóban viszont belefutottam a HMVC kifejezésbe. A fogalmat mint probléma forrást kezelték, ezért kicsit utána néztem mi is ez.

A fogalomba a Kohana PHP keretkörnyezet kapcsán futottam bele, de utána olvasva mi is ez megállapítható, hogy nem egy ördögtől eredő dolog, és számos keretkörnyezetben létezik, még ha nem is így hívják. Egy szó mint száz, ne féljetek a HMVC fogalomtól, csak nézzétek meg az alábbi linken a magyarázatot és kész:

http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

Fejlesztői munkám során nem kis problémát okozott a címsorban megjelenített hibajelzés. Az addig tökéletesen működő alkalmazásom egyszer csak “megbolondult” és hibát kivétel dobott. A problémát jelentősen nehezítette, hogy a kivételhiba jellegéből adódóan még debug sem állt a rendelkezésemre (igaz utólag megértve az okot, nem is segített volna). Mi is történt?

Hibajelenség

Az MVC alkalmazásom HTML form ablakában a mezők kitöltését követően a Submit folyamat megkezdésekor a rendszer az alábbi hibaüzenetet adta:

[InvalidOperationException: Operation is not valid due to the current state of the object.]
   System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2420558
   System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +58
   System.Web.HttpRequest.FillInFormCollection() +159

Hiba oka

A Microsoft 2011-12-29-én kiadta a Microsoft Security Bulletin MS11-100 – Critical szintű bejegyzést. A bejegyzés hibajavítására kiadták 2012-01-12-vel az MS KB Article ID 2661403 cikket és a hozzá kapcsolódó hibajavítást. Ez MINDEN eddigi Windows rendszerben a sérülékenységet orvosolja, viszont számomra ez a korlát jelenti a valódi problémát:

A rendszerekben ugyanis a DOS (Denial of Service) támadások elkerülése végett beépítésre került egy alapértelmezett válaszban megadható elemszám méret. Ez alapértelmezésben 1000! Amennyiben az ASP.NET form működése során ennél nagyobb elemszámmal találkozik, akkor a fenti hibaüzenettel fémjelzett kivételt dob.

Megoldás

Talán elsőre is látható, hogy a legegyszerűbb javítás az lenne, ha az elemszámot a számunkra szükséges mértékben megnövelnénk. Nos erre van lehetőség, az alkalmazás Web.Config fájl-t kell megfelelően kiegészíteni:

  <appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="1500" />
  </appSettings>

Ezt követően az alkalmazás minden hibajelzés nélkül rendben lefut. Figyeljünk azonban a kapcsolóra és feleslegesen ne növeljük az elfogadható elemszámot, ezzel is védve az alkalmazást és futtató környezetét.

 

További információ: