Из своего класса я вызываю другой класс, который вызывает API с функцией IAsyncResult, которая слушает, когда сервер отвечает.
Мой вопрос в том, как мне поступить, когда API ответит, принять этот ответ и выполнить действие.
Мой код слушает и получает ответ, но мне ничего не удается с ним сделать
winForm.cs:
var response = services.postService(payment,url);
//if response Its OK make somthing
service.cs
public HttpWebRequest request;
private static ManualResetEvent allDone = new ManualResetEvent(false);
public void postService(PayModel paymentObject, String url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "pay");
request.ContentType = "application/json";
request.Method = "POST";
var response = request.BeginGetRequestStream(new AsyncCallback(result => GetRequestStreamCallback(result, paymentObject)), request);
}
public void GetRequestStreamCallback(IAsyncResult asynchronousResult,PayModel paymentObject)
{
request = (HttpWebRequest)asynchronousResult.AsyncState;
using (var streamWriter = new StreamWriter(request.EndGetRequestStream(asynchronousResult)))
{
string json = new JavaScriptSerializer().Serialize(paymentObject);
Console.Out.WriteLine(json);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var response = request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
Console.WriteLine(responseString);
streamResponse.Close();
streamRead.Close();
response.Close();
allDone.Set();
frmVenta.closeTransaccion();
}
Я много чего пробовал, но не могу получить ответ, когда я кладу на него возврат, он никогда не выполняет действия, программа продолжается и не возвращает
Я не могу использовать HttpClient, программа старше.
Вы ограничены определенной версией .NET? В таком случае вы можете рассмотреть более новый подход async/await, чем более старый IAsyncResult и ассоциативные HTTP-клиенты.
.net Framework 3.0, не работает async await: v





Я предлагаю вам вместо этого использовать HttpClient. Намного проще и чище