Я вызываю сервер api и жду ответа. Я могу продолжить только после получения ответа от сервера. Но несколько раз ответ сервера принимается только после задержки, а в строке заголовка отображается сообщение "Не отвечающее сообщение". Как я могу это решить.
Мой кодовый блок
private string SubmitDocument(XmlDocument xmlinput, string URL)
{
try
{
// get the data from the xml document into a byte stream
Byte[] byteinput = System.Text.Encoding.UTF8.GetBytes(xmlinput.OuterXml);
// instantiate a web client
System.Net.WebClient myWebClient = new System.Net.WebClient();
myWebClient.Headers.Add("Content-Type", "text/xml");
byte[] responseArray = myWebClient.UploadData(URL, byteinput);
string responseString = Encoding.ASCII.GetString(responseArray);
return responseString;
}
catch(Exception ex)
{
return null;
}
}
Спасибо
Вместо того, чтобы блокировать пользовательский интерфейс, выполните эту работу в фоновом потоке (возможно, BackgroundWorker
, возможно, ThreadPool
). Поскольку кажется, что вы хотите эмулировать синхронный, просто отключить элементы управления пользовательским интерфейсом - не висеть. Затем обновите пользовательский интерфейс, когда вы получите ответ от сервера.
Я предлагаю реализовать асинхронный вызов. Это заставит ваше приложение реагировать. Вы можете легко реализовать асинхронный вызов через класс webrequest.
Windows показывает неответственное сообщение в типе приложения, когда цикл proc окна (то есть ваш основной поток приложения) не обрабатывает сообщения.
Это происходит, когда ваш основной поток приложений занят каким-то образом ожидания или цикла (так же, как вы описываете и не можете обрабатывать сообщения Windows).
У вас есть некоторые параметры, так как приложение не может продолжаться до тех пор, пока оно не получит ответ от сервера, на котором у вас есть параметры:
while (!initialized)
{
Application.DoEvents();
initialized = Server.WaitInitialize(1000);
}
DoEvents
редко является хорошим ответом на эту проблему ...