2
負載均衡器(bigip/f5)環境在網站設置爲在asp.net 4.0下運行後,WCF服務不工作。 Javascript代理請求是作爲http而不是在asp.net 4下的https,這導致JS中的「拒絕訪問」錯誤。負載均衡問題下的WCF服務
與以前版本的asp.net沒有問題相同。任何想法??
負載均衡器(bigip/f5)環境在網站設置爲在asp.net 4.0下運行後,WCF服務不工作。 Javascript代理請求是作爲http而不是在asp.net 4下的https,這導致JS中的「拒絕訪問」錯誤。負載均衡問題下的WCF服務
與以前版本的asp.net沒有問題相同。任何想法??
這是一個.NET4迴歸,has been reported to Microsoft on Connect(請投票),但迄今爲止還沒有Microsoft的修復。現在我們寫了一些F5規則,在返回的路上重寫內容中的協議。吮吸,但可以防止在應用程序級別更改任何內容(如編寫自定義HttpModule)。
首先我們檢查它是否是我們必須處理的請求,如果是的話,我們標記並從客戶端刪除Accept-Encoding標頭,否則我們將無法在內容被弄亂的情況下回來的路上:
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_path("http
與set_path("https
。
when HTTP_RESPONSE_DATA {
if { $needToFixSvcReference equals 1 }
{
HTTP::payload replace 0 [HTTP::payload length] [string map {set_path("http set_path("https}[HTTP::payload]]
HTTP::release
}
}