负载均衡器问题下的WCF服务
在loadbalancer bigip/f5环境中,网站设置为在asp.net 4.0下运行后,WCF服务不工作。在asp.net 4下,Javascript代理请求将作为http而不是https发送,这导致JS中出现“拒绝访问”错误负载均衡器问题下的WCF服务,wcf,load-balancing,f5,Wcf,Load Balancing,F5,在loadbalancer bigip/f5环境中,网站设置为在asp.net 4.0下运行后,WCF服务不工作。在asp.net 4下,Javascript代理请求将作为http而不是https发送,这导致JS中出现“拒绝访问”错误 在以前版本的asp.net上,同样的工作方式没有问题。有什么想法吗???这是一个.NET4回归,请投票表决,但到目前为止微软还没有修复。现在,我们编写了一些F5规则,在返回的过程中重写内容中的协议。这很糟糕,但可以避免在应用程序级别更改任何内容,比如编写自定义Ht
在以前版本的asp.net上,同样的工作方式没有问题。有什么想法吗???这是一个.NET4回归,请投票表决,但到目前为止微软还没有修复。现在,我们编写了一些F5规则,在返回的过程中重写内容中的协议。这很糟糕,但可以避免在应用程序级别更改任何内容,比如编写自定义HttpModule 首先,我们检查它是否是一个,我们甚至必须处理请求,如果是这样,我们将标记并从客户端删除Accept Encoding标头,因为如果它在返回时被gzip压缩,我们将无法处理内容:
when HTTP_REQUEST
{
set normalizedPath [string toupper [HTTP::path]]
if {$normalizedPath ends_with ".SVC/JS" || $normalizedPath ends_with ".SVC/JSDEBUG"}
{
set needToFixSvcReference 1
if {[HTTP::header exists "Accept-Encoding"]}
{
HTTP::header remove "Accept-Encoding"
}
}
else
{
set needToFixSvcReference 0
}
}
然后,对于响应处理,我们检查是否应该干扰响应,如果是,我们收集内容:
when HTTP_RESPONSE {
if($needToFixSvcReference equals 1)
{
# grab the response
if { [HTTP::header exists "Content-Length"] }
{
set content_length [HTTP::header "Content-Length"]
}
else
{
set content_length 20000
}
if { $content_length > 0 }
{
HTTP::collect $content_length
}
}
}
然后,我们再次检查是否应该对该响应执行任何操作,并将任何set_pathhttp替换为set_pathhttps
这是一个.NET4回归,请投票表决,但尚未从微软修复。现在,我们编写了一些F5规则,在返回的过程中重写内容中的协议。这很糟糕,但可以避免在应用程序级别更改任何内容,比如编写自定义HttpModule 首先,我们检查它是否是一个,我们甚至必须处理请求,如果是这样,我们将标记并从客户端删除Accept Encoding标头,因为如果它在返回时被gzip压缩,我们将无法处理内容:
when HTTP_REQUEST
{
set normalizedPath [string toupper [HTTP::path]]
if {$normalizedPath ends_with ".SVC/JS" || $normalizedPath ends_with ".SVC/JSDEBUG"}
{
set needToFixSvcReference 1
if {[HTTP::header exists "Accept-Encoding"]}
{
HTTP::header remove "Accept-Encoding"
}
}
else
{
set needToFixSvcReference 0
}
}
然后,对于响应处理,我们检查是否应该干扰响应,如果是,我们收集内容:
when HTTP_RESPONSE {
if($needToFixSvcReference equals 1)
{
# grab the response
if { [HTTP::header exists "Content-Length"] }
{
set content_length [HTTP::header "Content-Length"]
}
else
{
set content_length 20000
}
if { $content_length > 0 }
{
HTTP::collect $content_length
}
}
}
然后,我们再次检查是否应该对该响应执行任何操作,并将任何set_pathhttp替换为set_pathhttps