负载均衡器问题下的WCF服务

负载均衡器问题下的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

在loadbalancer bigip/f5环境中,网站设置为在asp.net 4.0下运行后,WCF服务不工作。在asp.net 4下,Javascript代理请求将作为http而不是https发送,这导致JS中出现“拒绝访问”错误


在以前版本的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