我正在通過HttpWebRequest
從遠程服務讀取數據。接收到的JSON消息暫時存儲爲List(Of Customer)
,隨後使用Dapper將其插入到Azure SQL中的表中。應用程序以Azure App Service中託管的.Net Framework 4.6.2作爲ASP.NET運行。所以這是兩個步驟:SQL插入(Dapper)後執行一次HttpWebRequest超時
A.採用小巧玲瓏的獲取通過HTTP請求和存儲數據爲List(Of Customer)
B.插入List(Of Customer)
到客戶表中的SQL Azure中。
下獲得通過HTTP請求和存儲數據的List(Of Payment)
D.插入List(Of Payment)
到Azure的付款表:
,直到我嘗試閱讀並插入另一組在相同的過程數據也能正常工作SQL使用Dapper。
問題:第二個HTTP請求(步驟C)總是超時。我做了多個測試。這裏是我的觀察:
- 這兩個HTTP請求通常需要2到3秒才能完成獨立執行。
- 將步驟的順序更改爲A,C,B,D完美地工作。多個後續請求A,C,A,C ...也可以工作。這證明沒有遠程服務器問題。
- HTTP請求超時僅在前面插入SQL時纔會出現。
- 我已經將A + B分成一個函數,將C + D分隔到另一個函數中,並通過兩個單獨的按鈕通過GUI觸發它們。超時時間到了。
- 當C + D在A + B之後執行,但延遲1 - 2分鐘時,一切正常。似乎在步驟A + B中插入的數據越少,爲了正確執行就需要C + D的較小延遲。
- 執行A + B後,對同一臺服務器的任何其他HTTP請求(與A)都會超時,即使請求的URL不存在。如果另一個HTTP請求是通過同一瀏覽器窗口觸發的,另一個甚至是來自其他PC(不同的asp.net會話)觸發無關緊要。
- 一旦前面提到的任何其他HTTP請求被取消(觸發它的瀏覽器窗口將被關閉或重定向到其他頁面)而無需等待超時,並且無需延遲1 - 2分鐘,C + D就可以正常工作。甚至在幾秒鐘後觸發。只有第一次請求超時。
- 我試圖增加
ServicePoint.ConnectionLimit
和System.Net.ServicePointManager.DefaultConnectionLimit
但是他們已經被設置爲Int32.MaxValue
。
這表明SQL插入和隨後的HTTP請求之間的一些鏈路。然而,這似乎很難相信,我會在像內存泄漏一些更普遍的問題,等等。
編輯點:
試圖進一步調查。使用原始場景A + B + C + D,一旦第一個HTTP請求返回的行數有限,它就開始工作。最初的遠程服務返回了18.000行。看起來像10.000是數字,當它開始工作(一些執行仍然錯誤地運行)。在步驟中有9.000行代碼運行時沒有任何問題。在步驟B中插入自然SQL需要更少的時間。
它似乎是控制數據最大大小的Web服務的安全權限。聯繫可以在web.config中修改這些參數的web管理員。 –
不能同意,因爲一旦跳過數據庫插入,可以從遠程服務器讀取數據,沒有任何問題。看我的觀察沒有。 2. – Megrez7