簡體   English   中英

從我的Web API調用第三方Web API時,Web服務器掛起

[英]The web server hangs while calling 3rd party Web API from my Web API

當我運行該行時,我需要從我的ASP.net Web API調用3方Web Api

HttpResponseMessage response = await client.PostAsJsonAsync("api/ArTrx/postDocument", poMaster);

Web服務器掛起。 我試圖將下面的代碼放入控制台程序,它運行良好。 在ASP.net Web API項目中運行時,下面的代碼有什么問題?

client.BaseAddress = new Uri(webAPIAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

string token = Crypto.EncryptStringAES("abcd1234");
client.DefaultRequestHeaders.Add("X-Token", token);

HttpResponseMessage response = await client.PostAsJsonAsync("api/ArTrx/postDocument", poMaster);    
if (response.IsSuccessStatusCode)
{
    ...
}

您可能有一個Task<T>.Result Task.WaitTask.Wait進一步調用您的調用堆棧。 這將導致我在我的博客上更詳細描述的ASP.NET死鎖

總之, await將捕獲一個“上下文” - 在本例中是一個ASP.NET請求上下文,它一次只允許一個正在運行的線程。 當等待完成時(即POST結束時), async方法將在該上下文中繼續。 如果您的代碼阻塞了調用堆棧(例如, ResultWait ),那么它將阻止該ASP.NET請求上下文中的線程,並且async方法無法進入該上下文以繼續執行。

您沒有在控制台應用程序中看到死鎖,因為沒有捕獲上下文,因此async方法在線程池線程上恢復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM