您好,
我有一个简单的ASP.NET MVC C#网页,用户可以提交标题,说明,标签和链接(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 :(得分:0)
例如,如果您使用的是web api,则可以将api控制器操作更改为异步。 如果这样做,响应将不会返回到客户端,直到任务完成,但它也不会阻止其他客户端/线程!
实施例
[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody]MyObject obj)
在该方法中,您还应该使用async await模式来创建自定义请求...
有一些文章可以获得有关如何构建异步Web apis的更多信息
http://www.dotnetcurry.com/showarticle.aspx?ID=948
并且可能会看this video