Sebastian,

It would be helpful to know which version of Pharo and Zinc HTTP Components you 
are using. 

That being said, there is not much special about #beOneShot. ZnClient always 
does HTTP 1.1 which means it defaults to keeping connections open and handling 
multiple request/response cycles over it, each side should be ready to handle 
unexpected closing. What #beOneShot does, is setting 'Connection: close' in the 
request, which tells the server that it does _not_ intend to send more than one 
request and will not read more than one response. This is standard behavior.

I understand that you cannot provide a reproduceable situation, but I need more 
information if you expect me to help you. Maybe you can send a stacktrace with 
sensitive information filtered out. What you can also do is inspect both the 
request and response instance variable of the ZnClient object right after the 
failure. Since you only get it with one service, it will be related to that 
service.

I have no other reports of problems in this area (and ZnClient is used daily in 
all Pharo 1.3, 1.4 and 2.0 images), but maybe you hit some border case that can 
help improve the code.

Sven

On 30 Aug 2012, at 16:53, Sebastian Sastre <[email protected]> wrote:

> Hi there,
> 
> I've started using Zinc in more projects and it's doing well.
> 
> Except for one thing :)
> 
> Using the http client, I've found exceptions happening when receiving the 
> answer after the request.
> 
> I remember one related to someone sending #contents and failing due to entity 
> being nil instead of the expected something stream related (see 
> ZnClient>>contents).
> 
> I also found that not using #beOneShot helps.
> 
> If I make #beOneShot a no-op by commenting "self optionAt: #oneShot put: 
> true" everything works as expected.
> 
> That makes #beOneShot suspicious about making the client to close the 
> connection before getting the contents of the data answered in the stream. It 
> seems to be closing the connection without reading the answer the server sent.
> 
> I don't know of more cases but this of course *had* to happen when using 
> Merchant* to talk to my gateway to process credit card payments so you can 
> have an idea how frustrating this is.
> 
> With the workaround things are okay so far but I'm a little worried about 
> this bug because it seems that beOneShot is the default for everything http 
> client in Pharo and it is going to be needed a lot.
> 
> Let me know how I can be of further help to get this fixed
> 
> sebastian
> 
> o/
> 
> *Merchant is available in squeak source and yeah, I know, I should move it to 
> ss3 but maybe I'm waiting for smalltalkhub


--
Sven Van Caekenberghe
http://stfx.eu
Smalltalk is the Red Pill




Reply via email to