IIS7 Application Request Routing (arr reverse proxy) combined with managed module - time out

前端 未结 4 636
遥遥无期
遥遥无期 2021-02-04 10:55

I am trying to build a proxy that would serve requests to an internal site (hiding the origin) but at the same time inspect the packets and asynchronously post-process them.

4条回答
  •  梦如初夏
    2021-02-04 11:40

    I know this is a year old question, but I just went through the same thing and found a solution. So, I'm posting it here for anyone else that runs into this.

    In my case I only saw the timeout issue with POST requests.

    It appears that the 2.0/2.1 ARR assumes that the input stream will be at the start of the posted data. However, the following code (for example) will break this assumption:

        HttpContext context = HttpContext.Current;
        HttpRequest request = context.Request;
    
        string value = request.Params["Name"];
    

    The key is how Params is described

        Gets a combined collection of System.Web.HttpRequest.QueryString,
        System.Web.HttpRequest.Form, System.Web.HttpRequest.ServerVariables,
        and System.Web.HttpRequest.Cookies items."`
    

    When the request is a POST, accessing Params will read the posted data from the input stream, invalidating ARR's assumption. As will reading from the input stream.

    I knew the data I needed was in the query string, not the posted data, so I worked around this by accessing the QueryString instead of Params. This avoids reading the posted data and works fine for me.

        string value = request.QueryString["Name"];
    

    This issue appears to be fixed in ARR 2.5.

    Upgrading ARR appears to be the only solution if you need to access posted data before handing off to ARR. The key is to let HttpRequest handle acquiring the data into Params. If you read it directly it will not work.

提交回复
热议问题