我正在尝试构建一个代理服务器来处理对内部站点的请求(隐藏原点),但同时检查数据包并异步后处理它们.
例如,假设所有对http://www.foo.com的 SOAP调用都将转到http://192.168.1.1,同时存储在数据库中进行后期分析.内部服务器是一个黑盒子,所以更改它的内容超出了这个问题的范围.
无论如何,我已经配置了ARR,使用反向代理,使用通配符制作URL重写过滤器,所有工作都完美无瑕.然后,我尝试添加一个用C#编写的托管HttpModule,并挂钩到Application_BeginRequest和Application_EndRequest.我能够在最终请求(应用程序池处于集成模式)中访问请求标头,响应标头,甚至能够通过在Response.Filter上设置过滤器来读取输出流中的响应内容,该过滤器将所有写入缓存在附加内存流中.
问题是,当我尝试读取(在模块BeginRequest处理程序内)来自请求的输入流时,ARR会停留一段时间并抛出一个
HTTP错误502.3 - 错误网关操作超时处理程序ApplicationRequestRoutingHandler错误代码0x80072ee2
所以它超时了.
查看失败的请求跟踪我看到:
MODULE_SET_RESPONSE_ERROR_STATUS警告ModuleName ="ApplicationRequestRouting",Notification ="EXECUTE_REQUEST_HANDLER",HttpStatus ="502",HttpReason ="Bad Gateway",HttpSubStatus ="3",ErrorCode ="2147954402",ConfigExceptionInfo =""SET_RESPONSE_ERROR_DESCRIPTION警告ErrorDescription ="操作时间到"
现在网上的任何类似帖子都没有帮助,因为这不是超时错误(代理有120秒设置,页面答案不到100毫秒),以及我评论试图读取FORM数据的处理程序代码的那一刻或者InputStream数据,一切都可以作为魅力.
即使我在读取后将输入流的位置设置为0,我仍然会有超时.如果我在EndRequest上读取输入流,它将获得0个字节,即使它是POST请求.(这显然是错的)
ARR是否有一个错误,我尝试在尝试重新路由之前尝试读取输入流?
使用的东西:Windows Server 2008 R2 IIS 7.5 ARR v2 .Net Framework 3.5模块
想法?谢谢/ Cosmin