带C#的异步webrequest?

带C#的异步webrequest?,c#,asp.net,asp.net-mvc,httpwebrequest,C#,Asp.net,Asp.net Mvc,Httpwebrequest,你好, 我有一个简单的ASP.NET MVC网页,用户可以提交标题、描述、标签和链接(URL)。该服务的帖子由JASON(AJAX)发送,在大多数情况下都非常有效。但有时文章只是挂起,什么也没有发生,当这种情况发生时,加载此网站的任何其他页面也会变慢 webmethod非常简单,它首先将数据存储到数据库,然后使用HttpWebRequest获取URL页面。然后读取获取的页面(标题数据),在大多数情况下,它存储一个图像 我怀疑hangig是由于HttpWebRequest花费了很长时间。请求方法从

你好,

我有一个简单的ASP.NET MVC网页,用户可以提交标题、描述、标签和链接(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网页之前,用户可能会被重定向到post页面。

例如,如果您使用的是web api,则可以将api控制器操作更改为异步。 如果这样做,在任务完成之前,响应不会返回到客户端,但它也不会阻止其他客户端/线程

范例

[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody]MyObject obj)
[HttpPost]
公共异步任务Post([FromBody]MyObject obj)
在该方法中,您还应该使用异步等待模式来创建自定义请求

关于如何构建异步web API的更多信息,请阅读一些文章


也许看看

我不清楚问题出在哪里。“可能更好”在什么方面更好?你的代码现在运行吗?你想改进什么?正如我所说的“有时帖子只是挂起,当这种情况发生时什么也没有发生,加载这个网站的任何其他页面也会变慢。”我确信这与webrequest代码有关。所以你的问题是“为什么这个帖子挂起以及如何修复它?”。这里没有可以找到问题的信息。远程服务器只是没有响应吗?在这种情况下,请修复服务器。使用Fiddler来找出问题所在。这就是问题所在,它并不总是存在,而且我还无法在自己的服务器上手动重新创建问题。这只发生在主办方,但也有更多的交通。由于所有其他操作都很简单,我确信问题出在我发布的代码中。更好的方法可能是异步webrequest,但我也不确定这是否能解决问题。我使用Elmah记录异常,但这不会引发任何异常,它只是挂起并使所有其他调用变慢。Async也会等待,或者在发送响应时不会得到结果。这两种情况都可能是您无法接受的。尝试用最少的代码行创建一个小的复制案例。可能在循环中请求URL,直到它“挂起”。你能解释一下吗?也许你有一篇文章要读更多关于这个的?当然,添加了一些链接到答案