【发布时间】:2014-08-04 02:04:09
【问题描述】:
我有一个 MVC 控制器。在那个控制器中,我引用了一个访问第 3 方请求(通过 webrequest)的 WCF 服务,该服务返回信息,然后保存在 WCf 服务中(非常具体地说,我们正在收集有关访问的数据并将它们保存到数据库中,以便我们可以更好地定位我们的页面组织)。
TL;DR 是这样的:
private ActionResult CollectTrackingData(string campaign = "none")
{
VanityURLService.VanityURLConnector connector = new VanityURLService.VanityURLConnector();
connector.SaveTrackingData(Request, campaign);
return View(someVarView);
}
SaveTrackingData 在调用此方法之前会做很多事情(经过编辑以保护不那么无辜的人):
private string TranslateGeolocation(string ipAddress)
{
WebRequest pageRequest = System.Net.WebRequest.Create("http://blahblah.com");
WebResponse resp = pageRequest.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
string reqResp = sr.ReadToEnd().Trim();
return reqResp.ToString();
}
可能导致问题的部分是WebResponse resp = pageRequest.GetResponse();,但我不禁想到最好的方法是使级联整个过程异步的调用(这将是控制器代码:@ 987654324@
但是当我尝试使调用异步时,它对我抱怨一些事情,直到经过多次调整后,它要求我让它返回一个返回类型,然后仍然无法工作,因为我认为我不能在页面生命周期的那个阶段使其异步(然后它提供了无用的 aspx 代码,因为我正在使用 Razor 引擎运行)。
这一切似乎比它需要的要困难得多。我觉得我应该能够使 CollectTrackingData() 调用异步,但它不喜欢那样。
有人能指出正确的方向吗?
【问题讨论】:
标签: c# asp.net-mvc wcf asynchronous