2013-12-22 67 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