2014-11-04 25 views
4

我有一個Silverlight Web應用程序託管在IIS上的Azure虛擬機上。我有另一個託管SQL Server的虛擬機以及Web應用程序交互的其他應用程序。我使用Azure虛擬網絡在這兩個虛擬機之間建立了一個局域網。運行IIS並託管Web應用程序的虛擬機也是我的域控制器,我正在使用Windows身份驗證來驗證此Web應用程序中的用戶。該應用程序使用實體框架來執行一些存儲過程。遠程調用實體框架中的存儲過程時服務器沒有響應

當本地和遠程訪問Web應用程序時,總體看起來工作正常,但有一個特定的存儲過程需要大約25分鐘的時間才能執行,但通過此Web應用程序遠程執行時,似乎無法正常運行。請記住,這25分鐘實際上是預期的時間,因爲此存儲過程處理數百萬條記錄。

所以這裏是我遇到的問題。當從SQL Server Management Studio執行此存儲過程時,它在大約25分鐘內完成。當我通過使用託管應用程序的服務器的內部IP在本地從Web應用程序執行此存儲過程時,它在大約25分鐘內競爭,服務器將響應發回並且應用程序更新其狀態。但是,當我通過web應用程序執行遠程使用服務器的公網IP,雖然存儲過程執行和服務器上的25分鐘內完成,應用程序永遠不會響應從服務器返回,一直停留在忙碌狀態。

我知道存儲過程執行,因爲我在數據庫服務器直接追蹤它並使用SQL事件探查器來跟蹤從實體框架,這是存在的存儲過程完成執行後,即使任何打開的連接。 我也使用提琴手來跟蹤所有的HTTP流量,這就是我所看到的。

在使用內部IP Executing locally

通過Web應用程序在本地執行,同時使用公共IP通過Web應用程序遠程執行 enter image description here

所有其他存儲過程需要幾秒鐘來執行,他們似乎工作在本地和遠程。我不確定Azure的端點映射是否與此有關。當執行此存儲過程我設置CommandTimeout屬性爲0

任何幫助將是非常讚賞!

圖像鏈接:

本地執行:http://i.imgur.com/NGNre3T.png

遠程執行:http://i.imgur.com/haB3fwm.png

回答

0

這可能是由天青負載平衡器的空閒超時。看看this page看看它是否能解決問題。使用最新版本的Azure中的PowerShell,您可以查看當前超時設置:

Get-AzureVM –ServiceName 「your-service-name」 –Name 「your-vm-name」 | Get-AzureEndpoint 

根據您的設置,您可能能夠進行此設置使用:

Set-AzurePublicIP –PublicIPName "the-ip-name" –VM 「your-vm-name」 -IdleTimeoutInMinutes 15 
+0

太好了!我曾讀到湛藍的負載平衡器這4分鐘默認的超時時間,隨後發送數據包每4分鐘或更小,以保持連接的一些建議。我試圖每隔2分鐘發送一次數據包以保持tcp連接正常,但由於某種原因,這似乎沒有幫助。我不知道在創建端點時有辦法設置空閒超時值。你發佈的文章做了訣竅。我將時間設置爲30分鐘,到目前爲止存儲已經運行,並且服務器在25分鐘內按預期執行之後已經響應。謝謝! – Najir 2014-11-06 03:25:34