Nasıl bir SOAP mesajının maksimum boyut belirlenir?

5 Cevap php

PHP 5.2.6 NuSOAP kullanıyorum ve maksimum mesaj boyutu sadece 1000 byte (bu zor anlamlı bir şey yapmak kılan) olduğunu görüyorum. Bitiş noktasının WSDL bu set ya da bu ben NuSOAP yapılandırabilirsiniz bir şeydir?

5 Cevap

Bir "1000 bayt sınırı" hakkında FUD ilgili ... Ben nusoap_client sourcecode baktı ve sınır debug output için tek etkili olduğunu buldu.

Hata ayıklama günlüğüne gösterilir: Bu tüm veri işlenir ve geçti webservice için (ne olursa olsun onun büyüklüğü), ama (karakter veya daha kesin) ilk 1000 bayt sadece anlamına gelir.

İşte kod:

$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));

// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);

Açıkça görüldüğü gibi, getHTTPBody() çağrı $soapmsg bütün kullanır ve yalnızca hata ayıklama çıkışı ilk 1000 karakterle sınırlıdır. Bunu değiştirmek isterseniz, sadece değiştirmek substr() ihtiyaçlarına uygun aramak, ya da sadece $soapmsg (yani her şeyi çok, hata ayıklama çıkışı gösterilmiştir) ile değiştirin.

Bu aslında gönderilen veriler üzerinde herhangi bir gerçek sınırı ile hiçbir alakası olmalıdır. Orada tabii ki aslında (örneğin PHP script, HTTP uygulama sınırlamaları veya mevcut sanal bellek tükeniyor için belirlenen RAM sınırı) gönderebilirsiniz ne boyutunu sınırlayan diğer faktörler olabilir, ama orada hiçbir hafife alabilir Eğer NuSOAP ile gönderebilirsiniz veriler için bir "1000 bayt sınırı" gibi bir şey.

Ben sadece PHP ile passingly-tanıdık, ve tüm NuSOAP paketini hiç kullanmamış. Ancak, SOAP mesajın boyutu sadece taşıma ortamı ile sınırlı olmalıdır. HTTP durumunda, oldukça form POST istekleri 16384 bayt sınırlama aslında artık var olmayabilir Tarayıcı sınırlamaları (geliyor, nedeni SABUN değil, ama kesin bilmiyorum (sınırsız çok) olmalı .)

Ben NuSOAP yazarları / bakımcılara için bir iletişim adresi bulma tavsiye ve bunları doğrudan sormak istiyorum. Orada bir şey WSDL (ve ben bir bütün mesaj-vücut büyüklüğü ... XML Şeması yönleriyle aracılığıyla bireysel parametreleri () değil, genel vücut sınırlamak olur WSDL spec şey hatırlamıyorum), daha sonra sınırlama sürece araç içinde gözükmektedir.

Bir üretim kutusunda kullandığımız PHP 5.2.5 PHP 4 sunucu ve NuSOAP gibi Sabun-fonksiyonları-inşa ve başarılı 1 MB'den büyük iletileri transfer ettik.

Ben iki üründe de bir sınırlama olduğunu sanmıyorum, ama php.ini ayarlarınızı kontrol etmelisiniz

max_input_time        (defaults to 60)

Bu, her komut girişi ayrıştırmak için izin zamanıdır. Ayrıştırma tamamlanmadan önce zaman kadar ise, komut dosyası bile çalışmaz.

Bir sidenote: Mümkünse, ben SoapClient / SoapServer PHP uzantısı sınıflara göç öneririz. NuSOAP bu önbellek söz konusu olduğunda, ağır yük durumlarında çok güvenilir değil kendini kanıtlamıştır. Bazen NuSOAP sadece wsdl tanımlarını "unutmak" ve hiçbiri-wsdl-modunda çalışma gördüm. Garip ...

SOAP mesaj gönderme veya alma eğer etmedin. Eğer gönderme ediyorsanız, ben NuSOAP POST ile göndermek olduğunu görmek yerine GET kontrol ederdim (muhtemelen görmek için koduna kazmak zorundasınız, ben seyrek belgelerine buldum). Eğer alıyorsanız, bellek ve veri boyutu gibi şeyler için PHP.INI ayarlarını kontrol edin. Aslında, zaten hafıza sınırlarını kontrol - NuSOAP oldukça bellek domuz, IIRC olduğunu.

Ben mesaj boyutu bazı kodlanmış değer tarafından daha PHP bellek limiti ile oldukça sınırlı olacağını düşünüyorum. En azından ben herhangi bir sorun olmadan 6.5MB dize gönderebilir. Ben bir 8MB dize göndermeye çalıştım ben (benim sunucu PHP için 64MB sınırı vardır) nusoap.php iç bellek özel bir çıkış var.