Я следующий C класс #, который инициирует запрос HTTP с телефона Windows, на сервере:Fetching Результат от HTTP Response
public class Request
{
public string data;
public string result;
public Request()
{
}
public void doRequest(string parameters, string URL)
{
data = parameters;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
public void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
byte[] byteArray = Encoding.UTF8.GetBytes(data);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
public void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream());
result = httpWebStreamReader.ReadToEnd();
}
Теперь в моем главном классе, я вызываю метод doRequest, чтобы сделать HTTP запрос от телефона с Windows:
Request req = new Request();
req.doRequest("function=LogIn&username=" + username + "&password=" + password, "http://localhost:4000/Handler.ashx");
при вызове этого метода, как я могу получить результат (результата переменной) с сервера, так как она получена в методе GetResponsetStreamCallback и не в методе doRequest?
У меня нет вашей проблемы ... Вы подписались на событие с использованием 'IAsynResult' и обрабатываете событие с помощью своего метода ... Получите результат в методе GetResponsetStreamCallback (IAsyncResult callbackResult)'. –
@ bash.d Помните, что большой фрагмент кода - это собственный класс. Всякий раз, когда мне нужно использовать этот код, я создаю экземпляр класса и вызываю метод doRequest для создания httpRequest. Другие методы автоматически вызывается методом doRequest. Однако я не знаю, как получить результат этого класса в вызывающем классе. Btw, код в классе запроса не является моим. Я нашел его на msdn и немного изменил. –
у вас есть 2 варианта (возможно, больше), чтобы ваш класс реализовал один и тот же шаблон асинхронизации и разрешил пользователям взаимодействовать с вашим обратным вызовом или вы могли блокировать процесс и не использовать запрос начала/конца ... когда вы могли бы просто сделать все это одним способом и вернуть результат. –