我有Windows客户端应用程序和Windows服务通过HTTPS托pipe一个Web服务(在它后面使用标准的http.sys)。 除了用户犯了一个错误,并且使用HTTP和HTTPS端口访问服务的情况之外,一切都可以。 例如,服务暴露于: https://somehost:9000但用户不正确地设置http://somehost:9000 。
通常情况下,如果端点不可用,则客户端收到404找不到,但在这种情况下,端点可用,但主机需要首先进行SSL \ TLS握手。 当客户端使用纯HTTP来调用服务时,它挂起,客户端等待超时。 此外,我发现这是一些全局性的行为,因为通过HTTPS通过浏览器调用HTTP在IIS上公开的Web服务的行为方式完全相同。 超时总是130秒。 IIS上的连接保持活动状态configuration为120秒,因此看起来没有关联。
在这种情况下使用什么样的超时? 是否有可能改变它(这个问题有点抽象,因为我还不知道我想改变什么)?
我认为你可以使用URL重写模块,它做一种透明的redirect到正确的协议; 这里有一些细节
安装并启用URL重写,并configuration您的ISS虚拟站点不需要-SSL,以便它可以处理HTTP请求,并发送一个HTTPredirect回https://像这样
<rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule>
这种策略比对系统范围的TCP参数进行可能的改变要好得多。
另一种方法是在应用程序中的http.sys组件上设置适当的超时值。 本文档中提到了一些默认值和参数。