I'm trying to understand why our mobile client isn't behaving
gracefully with a "hung" server. The server is accepting web requests,
but then not responding to them. Obviously we're working on that side
of the problem too, but we thought that by putting a timeout on the
WebRequest, and backing off in the same was as we do for other errors,
that we'd have a robust system. Apparently we don't.

I'm being absolutely rigorous in cleaning up - not only am I calling
Close() on every WebResponse received (including those embedded in
WebExceptions) but I'm also closing the ResponseStream - hopefully
unnecessarily.

The situation is slightly complicated by the server being hung in such
a way that the first request is rejected (correctly) with a 401
response due to the way our authentication works. (The first request
for any client is a 401 with a nonce to use for future authentication.)

The first request works fine with a suitably high timeout, although it
*does* time out if the timeout is set very low.

The second request (which the server actually hangs on) never seems to
time out.

It's as if the timeout only applies from the start of the call
(WebRequest.GetResponse) to the time at which the connection is
actually made.

Does anyone have any idea what's going on, and how to fix it?

--
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too

Re: WebRequest.Timeout bugs? by David

David
Mon Aug 23 10:28:14 CDT 2004

I've found that if the server accepts the request, then sends back some
data, but never completes the response, the timeout MAY not trigger
properly. You may need to switch to asynchronous requests for tighter
control over the process.

-Dave


"Jon Skeet [C# MVP]" <skeet@pobox.com> wrote in message
news:MPG.1b940f1e1efe479498b26c@msnews.microsoft.com...
> I'm trying to understand why our mobile client isn't behaving
> gracefully with a "hung" server. The server is accepting web requests,
> but then not responding to them. Obviously we're working on that side
> of the problem too, but we thought that by putting a timeout on the
> WebRequest, and backing off in the same was as we do for other errors,
> that we'd have a robust system. Apparently we don't.
>
> I'm being absolutely rigorous in cleaning up - not only am I calling
> Close() on every WebResponse received (including those embedded in
> WebExceptions) but I'm also closing the ResponseStream - hopefully
> unnecessarily.
>
> The situation is slightly complicated by the server being hung in such
> a way that the first request is rejected (correctly) with a 401
> response due to the way our authentication works. (The first request
> for any client is a 401 with a nonce to use for future authentication.)
>
> The first request works fine with a suitably high timeout, although it
> *does* time out if the timeout is set very low.
>
> The second request (which the server actually hangs on) never seems to
> time out.
>
> It's as if the timeout only applies from the start of the call
> (WebRequest.GetResponse) to the time at which the connection is
> actually made.
>
> Does anyone have any idea what's going on, and how to fix it?
>
> --
> Jon Skeet - <skeet@pobox.com>
> http://www.pobox.com/~skeet
> If replying to the group, please do not mail me too



Re: WebRequest.Timeout bugs? by Jon

Jon
Mon Aug 23 11:14:35 CDT 2004

David D Webb <spivey@nospam.post.com> wrote:
> I've found that if the server accepts the request, then sends back some
> data, but never completes the response, the timeout MAY not trigger
> properly. You may need to switch to asynchronous requests for tighter
> control over the process.

Oh joy :(

Given that this only happens in very occasional situations (without the
connection itself going away, which I'll test but which I suspect is
enough to trigger the web request to complete with an error) I might
just detect it with my own timer which then triggers a message box
telling the user that the app will restart. Not pleasant, but of course
I'm hoping this will never happen in practice.

Next thing to look up is how to kill the process when there are hung
threads. Time to look on opennetcf.org...

--
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too