2013-12-22 97 views
0

嗨,與C#異步webrequest?

我有一個簡單的ASP.NET MVC C#的網頁,用戶可以提交標題,Descirption,標籤和鏈接(URL)。該服務的帖子與JASON(AJAX)一起發送,並且在很大程度上非常有效。但是,有時候這個帖子只是掛起,沒有發生這種情況,加載本網站的任何其他頁面也會變得緩慢。

webmethod非常簡單,首先它將數據存儲到數據庫,然後使用HttpWebRequest來獲取URL頁面。讀取的頁面然後被讀取(標題數據),並且在大多數情況下它存儲圖像。

我懷疑hangig是由於HttpWebRequest需要很長時間。請求方法以此開始:

if (url != null && url.Length > 0) 
       { 
        request = (HttpWebRequest)HttpWebRequest.Create(url); 

        dirInfo.Create(); 

        request.UserAgent = ConfigurationManager.AppSettings["DomainName"]; 
        webresponse = (HttpWebResponse)request.BeginGetResponse(.GetResponse(); 
        if (webresponse.ContentType.StartsWith("image/")) 
        { 
         using (WebClient tmpClient = new WebClient()) 
         { 
          client.DownloadFile(url, postThumbnailsTemp + "\\" + fileName); 
         } 

         if (SavePostImage(postThumbnailsTemp + "\\" + fileName, postId)) 
          return true; 
        } 


        if (webresponse.ContentType.StartsWith("text/html") || webresponse.ContentType.StartsWith("application/xhtml")) 
        { 
          var resultStream = webresponse.GetResponseStream(); 
          doc.Load(resultStream); 

問題是在這裏使用異步調用可能會更好嗎?像HttpWebRequest.BeginGetResponse?這意味着用戶可能會在讀取和存儲URL網頁之前重定向到帖子頁面。

+0

我不明白這個問題是。在什麼方面「可能會更好」更好?你的代碼現在工作嗎?你想改善什麼? – usr

+0

正如我所說的「有時候這篇文章只是掛起,沒有發生這種情況發生時,加載本網站的任何其他頁面也會變得很慢。」並確保這與網絡請求代碼有關。 – Banshee

+0

所以你的問題是「這個POST爲什麼會掛起,以及如何解決它?」。這裏沒有任何信息可以找到問題。遠程服務器是否沒有響應?在這種情況下修復服務器。使用提琴手找出。 – usr

回答

0

如果您正在使用web API,您可以將您的api控制器操作更改爲異步。 如果你這樣做,響應將不會返回到客戶端,直到任務完成,但它也不會阻止其他客戶端/線程!

[HttpPost] 
public async Task<HttpResponseMessage> Post([FromBody]MyObject obj) 

在你還應該使用異步等待模式來創建自定義請求的方法......

對如何建立異步網絡API的更多信息,一些文章

http://blogs.msdn.com/b/webdev/archive/2013/09/18/scaffolding-asynchronous-mvc-and-web-api-controllers-for-entity-framework-6.aspx

http://www.dotnetcurry.com/showarticle.aspx?ID=948

也許手錶this video

+0

你能多解釋一下嗎? Maby你有一篇文章可以閱讀關於這方面的更多信息? – Banshee

+0

當然,添加一些鏈接到答案 – MichaC