Aufruf der asynchronen externen web-service in asp.net MVC-controller
In der Asp.net MVC-controller (GET-Methode), bin ich den Aufruf externer web-service - für geolocation der IP - Rückgabe json-Daten für IP-Standort. Wie kann ich den Aufruf zu sein, async, damit der Stapel fortfahren können, während der Wartezeit die Antwort vom service. Wenn die GEO-IP-Anfrage fertige ich möchte in der Lage sein, um update auf die db. Hier ist der aktuelle sync-code:
public ActionResult SelectFacility(int franchiseId, Guid? coachLoggingTimeStampId)
{
//...
string responseFromServer = Helpers.GetLocationByIPAddress(userIpAddress);
HomeModels.GeoLocationModel myojb = new HomeModels.GeoLocationModel();
if (!String.IsNullOrEmpty(responseFromServer))
{
JavaScriptSerializer js = new JavaScriptSerializer();
myojb = (HomeModels.GeoLocationModel)js.Deserialize(responseFromServer, typeof(HomeModels.GeoLocationModel));
}
//...
}
public static string GetLocationByIPAddress(string ipAddress)
{
Stream resStream = null;
string responseFromServer = "";
try
{
string url = GeoLocationPath.FreeGeoIP + ipAddress;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
responseFromServer = reader.ReadToEnd();
return responseFromServer;
}
catch (Exception ex)
{
//TODO handle this
}
finally
{
if (null != resStream)
{
resStream.Flush();
resStream.Close();
}
}
return responseFromServer;
}
Jeder Vorschlag - Threads, AsyncTask ?
Dank
- WebRequest.GetResponseAsync?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie Ihre ASP.NET MVC-controller asynchron:
http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4
Dann verwenden
HttpClient.GetStringAsync
undawait
sein Ergebnis:HttpClient
hier ist nicht mehr als ein thread zur gleichen Zeit, so ist es wird thread-sicher. Jedoch, in ASP.NET ein thread wechseln kann auftreten, nachdemafter
. Weiter hängt es davon ab, welche konkreten DB-API, die Sie gehen zu verwenden. Ich schlage vor, Sie Lesen Sie den Artikel hier: stackoverflow.com/tags/async-await/info