以前遇到問題解決了就完事了,缺少了總結和記錄,我決定以後恢復記錄blog的習慣。
Original Problem:
這次遇到的問題是iis crash的問題。
xxx.asmx是我們產品的一個web service,但是我們不想讓用戶可以發現這個文件的存在,當用戶訪問這個url的時候,會被直接direct到*.wsdl.
我們可以通過web.config+修改一個頂層的HttpHandler : IHttpHandler來實現。
(TODO: 1. 爲什麼要redirect? 2. IHttpHandler)
之前我們只direct了HTTP GET REQUEST, 而忽略了HTTP HEAD REQUEST。當我們處理傳入的http head request的時候,會發生InvalidCastException。
(TODO: 1. get/head有什麼區別?2. GET? 3. 爲什麼會有InvalidCastException?call stack?)
web.config在產品setup的時候deploy,在setup/deployment完成之後,對於一些小的bug/CDCR,我們通過release patching package來解決用戶的問題。
這個問題最初是在data center main branch上發現並fix的。但是這個解決方案不適用於patching。
<add name="EWSDiscoveryHandler"
path="*.asmx"verb="GET"
verb="GET,HEAD"
type="Microsoft.Exchange.Services.Wcf.EWSDiscoveryHttpHandler, Microsoft.Exchange.Services, Version=14.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
preCondition="integratedMode,runtimeVersionv2.0" />
類似於這種config文件的更改,我們的解決方案是在pathcing的過程中調用一系列腳本,其中包括UpdateConfigFile.ps1, 更改config文件。
Regression:
Regression的出現源於checkin的時候,忘記了web.config文件。
這個問題在hot branch上被掩蓋了,因爲hot branch的testing是基於pathcing的,當這個change從entprise hot branch到enterprise main branch的時候,問題就凸現出來了,因爲main branch的testing是基於full package setup的。
發現這個問題歸功於automation,針對一個企業級大型服務器系統,針對每次更改的test cover到這種不同http request到特定web service的可能性幾乎爲0,這種迴歸測試只能通過automation來實現。
好在我們在解決這個bug的時候增加了test coverage,雖然這個case在hot branch上是pass的(這意味着 用戶可以通過patching解決原始問題),但是在main branch上這條fail 的case就給我們拉了警報,順利的幫助我們防止了regression的出現
-Draft