Hi, I have Windows Server 2003 R2 + ISA2006+SP1. I am developing application filter and I met this problem in filtering of HTTP:
I do my attemtps with three machines: IIS <---> ISA Server <--->client . On the client I open IE, type URL and press enter. After response is received, I dont close web browser, but I clean cache and do request again and again several times.
So HTTP connection is keep-alive, first HTTP response is received by client OK always. But in next HTTP response (not always second, sometimes third or fourth...) are not data well ordered. Some piece of data in response are offset on bad place, so response is not usable.
I tried to dump data which service passes into CompleteAsyncIO() and I see that bad-ordered data comes from service. In C++ code there is called analyzing function from CompleteAsyncIO(). When I comment it, so that received data I pass to client side without analyzing, responses comes OK. I tried in my C++ code to create separate read-only data copy and analyze it to exclude case when my analyzing function changes directly something in IFWXIOBuffer's memory or behind it, it shows that Analyzing function does not change memory. I am trying to find solution more than week, no success.
Why ISA Server sometimes changes data order ? How my analyzing function can be reason or how it can be related to bad-ordered data received directly from ISA service ?
I tried other experiments to figure out my problem. I think that problem with bad-ordered data has nothing with my analyzer of data and I think that there is bug in ISA Server service. It seems that problem with bad-ordered received data is relating to way how is used Recv() and Send() in CompleteAsyncIO() . This thing is not well-documented, and I have questions:
1. What conditions must be fulfilled to Recv() in CompleteAsyncI() to continue with data-pumping ? For example can I continue with data-pumping (I mean call Recv()) on notifications from my Send() ? Or I must call Recv() to continue data-pumping only on notifications from previous Recv() ? 2. When I receive notification on Recv(), and after analyzing data, can I Send() them to client in several Send() in loop ? Or it must be sent with only one Send() ?