我有一些关于ASP .NET MVC 4并行编程的问题。 我想使用并行编程,因为同时接收来自多个API调用的数据。针对多个API调用的Asp.net MVC4并行编程
这里有一些小例子
RootObjectRS fairsearchRS1 = new RootObjectRS();
RootObjectRS fairsearchRS2 = new RootObjectRS();
RootObjectRS fairsearchRS3 = new RootObjectRS();
fairsearchRS1 = MakeRequest(searchUrl, WWWToken, request.TripType1, request.TripfromAirPort1, request.TriptoAirPort1, request.FlyfromDate1, request.FlytoDate1, request.Flyclass, request.Passengers, starting, reqstid);
fairsearchRS2 = MakeRequest(searchUrl, WWWToken, request.TripType2, request.TripfromAirPort2, request.TriptoAirPort2, request.FlyfromDate2, request.FlytoDate2, request.Flyclass, request.Passengers, starting, reqstid);
fairsearchRS3 = MakeRequest(searchUrl, WWWToken, request.TripType3, request.TripfromAirPort3, request.TriptoAirPort3, request.FlyfromDate3, request.FlytoDate3, request.Flyclass, request.Passengers, starting, reqstid);
这是我的代码只是小例子。使用make请求我调用这些API,并从它们获取数据并将它绑定到这些rootobjectRS对象。
现在我正在逐一发送这些请求。但我需要同时做到这一点,我需要等到这3个请求数据到达。
那么我应该如何使用并行或其他编程方法来解决这个问题? 因为现在需要1分钟。但如果我这样做,那么我可以在20秒内做到这一点。这是节省时间的主要原因。
我不知道这个并行编程概念是否可能来自ASP .NET MVC4。但是如果有人能够给我支持,那将是很大的帮助。至少一些好的教程也很有帮助。
编辑
其实这是我的makeRequest的功能,
public static RootObjectRS MakeRequest(string requestUrl, SeneruUBT.Models.TokenModels token, string triptype, string from, string to, string flyin, string flyout, string flyclass, string passengers, DateTime starting, int reqstid)
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("Authorization", token.token_type + " " + token.access_token);
request.Accept = "application/json";
string ttrip = triptype;
var streamWriter = new StreamWriter(request.GetRequestStream());
if (ttrip.Equals("OneWay"))
{
RootObject searchBFMRQO = CreateRequestObjectOneWay(triptype, from, to, flyin, flyclass, passengers);
String searchString = JsonConvert.SerializeObject(searchBFMRQO);
streamWriter.Write(JsonConvert.SerializeObject(searchBFMRQO));
streamWriter.Flush();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var httpResponse = (HttpWebResponse)request.GetResponse();
int sc = (int)httpResponse.StatusCode;
System.Diagnostics.Debug.Write(sc);
if (httpResponse.StatusCode != HttpStatusCode.OK)
{
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
RootObjectRS errorresult = JsonConvert.DeserializeObject<RootObjectRS>(result);
return (errorresult);
}
}
else
{
var resp = new StreamReader(httpResponse.GetResponseStream()).ReadToEnd();
RootObjectRS searchResponse = JsonConvert.DeserializeObject<RootObjectRS>(resp.ToString());
SearchResponseFlightService ResponsFlSer = null;
ResponsFlSer = new SearchResponseFlightService(new UBTRepository.UBTUnitofWorks(new UBTRepository.TravelEntities()));
SearchResponseFlight ReFl = new SearchResponseFlight();
ReFl.searchRequestID = reqstid;
ReFl.StopQuantity = "1";
ReFl.responseJson = resp.ToString();
DateTime ending = DateTime.Now;
ReFl.responseDuration = ending.Subtract(starting).Milliseconds;
ReFl.starttimestamp = starting;
ReFl.endtimestamp = ending;
ResponsFlSer.Add(ReFl);
searchResponse.reqid = reqstid;
return (searchResponse);
}
}
我现在认为它可以稍微容易理解。
将我的make请求更改为async后,它不工作 - 在MakeRequestAsync中发生错误。
public static async Task RootObjectRS MakeRequestAsync(string requestUrl, SeneruUBT.Models.TokenModels token, string triptype, string from, string to, string flyin, string flyout, string flyclass, string passengers, DateTime starting, int reqstid)
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("Authorization", token.token_type + " " + token.access_token);
request.Accept = "application/json";
string ttrip = triptype;
var streamWriter = new StreamWriter(await request.GetRequestStreamAsync());
if (ttrip.Equals("OneWay"))
{
RootObject searchBFMRQO = CreateRequestObjectOneWay(triptype, from, to, flyin, flyclass, passengers);
String searchString = JsonConvert.SerializeObject(searchBFMRQO);
streamWriter.Write(JsonConvert.SerializeObject(searchBFMRQO));
streamWriter.Flush();
}
HttpWebResponse response = await (HttpWebResponse)request.GetResponseAsync();
var httpResponse = await (HttpWebResponse)request.GetResponseAsync();
int sc = (int)httpResponse.StatusCode;
System.Diagnostics.Debug.Write(sc);
var resp = new StreamReader(await httpResponse.GetResponseStreamAsync()).ReadToEnd();
RootObjectRS searchResponse = JsonConvert.DeserializeObject<RootObjectRS>(resp.ToString());
SearchResponseFlightService ResponsFlSer = null;
ResponsFlSer = new SearchResponseFlightService(new UBTRepository.UBTUnitofWorks(new UBTRepository.TravelEntities()));
SearchResponseFlight ReFl = new SearchResponseFlight();
ReFl.searchRequestID = reqstid;
ReFl.StopQuantity = "1";
ReFl.responseJson = resp.ToString();
DateTime ending = DateTime.Now;
ReFl.responseDuration = ending.Subtract(starting).Milliseconds;
ReFl.starttimestamp = starting;
ReFl.endtimestamp = ending;
ResponsFlSer.Add(ReFl);
searchResponse.reqid = reqstid;
return (searchResponse);
}
凡将这个代码活你们是否在一个MVC网站的请求,如果是这样? ,请求来自哪里? –
实际上我是从不同的web API请求的 是的,我正在开发目前在azure应用服务中托管的mvc站点。 – TDM
我根据您的MakeRequest实现修改了我的答案。 。这应该可以解决你正在努力完成的任务。 –