Tömörített adatok átvitele C# és PHP között

WebSyX beépülő modulunk megváltozott vagy teljes adathalmazokat tölt fel webáruházak felé. A feltöltött adatok jól tömöríthetőek, TCP szinten tömörítjük is őket, de ez néha nem elég.

Több ügyfelünk jelezte, hogy a webszerver nem tud 1-2MB-nál nagyobb POST adatokat fogadni. Ezen lehet állítani, de ha a szerver nem saját, akkor a szolgáltató általában elhárítja az ilyen kéréseket. A WebSyX már korábban is darabolt bizonyos adatokat. Azok az adatok, amelyek biztosan nagyok (termékképek, dokumentumok) már eddig is 10-es, 20-as csomagokban utaztak. Bizonyos esetekben azonban a termék készlet feltöltése is elérheti az 1-2MB-ot.

compression

Hogy az ügyfeleink (pontosabban az ő webesük) meg tudja oldani a szinkront, egy új beállítást vezettünk be. Az adatokat tömörítve is lehet küldeni. Ilyen esetben a megérkező adat egy csomagolt XML.

Feltöltés oldalon használt:
DeflateStream sw = new DeflateStream(ms, CompressionMode.Compress)

Webszerver oldalon használt:
$data = gzinflate(base64_decode($_POST[“xmldata”]));

A bejegyzés azért íródott, mert ismét belefutottunk az informatikai inkompatibilitásba. Még a Concorde Értékpapír Zrt-nél találkoztunk azzal, hogy a Corba (akkor még XML helyett ez volt) másképp kezeli a dátumokat Delphiből és Javaból. Itt is hasonló a helyzet. A sima GZipStream-mel előállított, tömörített adat csak nem akart kicsomagolódni gzdecode()-dal és gzuncompress()-szel, a gzinflate() lett a megoldás. Sőt az gzdecode() függvény az alap PHP-nak nem is része, míg a gzencode() igen. Ez is érdekes…