Hi guys,

I have a problem with Zinc, I need to send a huge amount of data (bytes) that 
translates to ~50Mb.

When I do something like:

ZnEasy 
        post: 'http://localhost:15432' 
        data: (ZnEntity bytes: aHugeByteArray.]

I encounter a ‘ConnectionTimedOut: Data send timed out.’, I attach the stack 
trace:

ZdcSocketStream(ZdcSimpleSocketStream)>>flushBytes:startingAt:count:
ZdcSocketStream>>next:putAll:startingAt:
ZnBivalentWriteStream>>next:putAll:startingAt:
ZnUtils class>>nextPutAll:on:
ZnByteArrayEntity>>writeOn:
ZnEntityWriter>>writeEntity:
ZnRequest(ZnMessage)>>writeOn:
ZnRequest>>writeOn:
ZnClient>>executeRequestResponse
ZnClient>>getConnectionAndExecute in Block: [ self executeRequestResponse ]
BlockClosure>>ensure:
ZnClient>>getConnectionAndExecute
ZnClient>>executeWithRedirectsRemaining:
ZnClient>>executeWithRetriesRemaining: in Block: [ self 
executeWithRedirectsRemaining: self maxNumb...etc...
BlockClosure>>on:do:
ZnClient>>executeWithRetriesRemaining:
ZnClient>>executeWithTimeout in Block: [ self executeWithRetriesRemaining: self 
numberOfR...etc...
BlockClosure>>on:do:
ZnClient>>executeWithTimeout in Block: [ ...
ZnClient>>withTimeoutDo: in Block: [ ^ block value ]
ZnConnectionTimeout(DynamicVariable)>>value:during: in Block: [ ...
BlockClosure>>ensure:
ZnConnectionTimeout(DynamicVariable)>>value:during:
ZnConnectionTimeout class(DynamicVariable class)>>value:during:
ZnClient>>withTimeoutDo:
ZnClient>>executeWithTimeout
ZnClient>>execute in Block: [ result := self executeWithTimeout ]
ZnClient>>withProgressDo: in Block: [ ^ block value ]
ZnSignalProgress(DynamicVariable)>>value:during: in Block: [ ...
BlockClosure>>ensure:

I tried to:
- Augment the client timeout to a huge value (10 mins) but it has no effect: 
The data send still goes into timeout, after 10-15 sec
- I replaced the ZnEntity with a ZnMultiPartFormDataEntity, still no luck

I am wondering what else can I do.

Moreover, I discovered there is a #signalProgress: message to signal process. 
The following examples do not work, any hint?

################################################################################
Example 1, from the book @ http://zn.stfx.eu/zn/zinc-http-components-paper.html:

UIManager default informUserDuring: [ :bar |
  [ ^ ZnClient new
        signalProgress: true;
        get: 'http://zn.stfx.eu/echo?delay=2' ]
    on: HTTPProgress 
    do: [ :progress | bar value: progress printString. progress resume ] ]

################################################################################
Example 2, from ZnClientTests>>#testProgress works, but not when issuing a POST 
request
[ :bar |
                bar title: 'Downloading Sources...'.
                [
                        ZnClient new 
                                url: 
'http://files.pharo.org/sources/PharoV30.sources'; 
                                signalProgress: true;   
                                downloadTo: FileLocator temp ]
                        on: HTTPProgress 
                        do: [ :progress |
                                progress isEmpty ifFalse: [ bar current: 
progress percentage ]. 
                                progress resume ] ] asJob run.
…works but only when using #downloadTo: if you do a #post:contents: or a #get: 
as in the example with #get: 'http://zn.stfx.eu/echo?delay=10' no process is 
shown. Any hint?

Thanks in advance,
Roberto


Reply via email to