Вызов веб-службы C# ASMX
У меня есть веб-сервис ASMX, который мне нужно использовать как часть работы. Я вызываю эту службу через страницу ASPX для создания новых объектов в сторонней системе. У меня нет доступа к базовому коду для этой службы, он просто позволяет мне общаться с другой системой.
У меня возникают проблемы с выяснением, правильно ли я звоню в службу, и мне интересно, кто-нибудь может дать какой-нибудь совет.
Я установил страницу ASMX, и это дало мне класс 'ConfirmConnector', который я вызываю методом BeginProcessOperations. Я хочу подождать, чтобы вернуться, а затем проанализировать результаты. Результаты должны быть в формате XML, через который я перехожу, чтобы получить данные, которые мне нужны.
Проблема в том, что иногда этот процесс просто умирает от меня, т.е. когда я вызываю свой метод EndProcessOperations, тогда ничего не происходит. Я не получаю ошибку, ничего - мой код просто умирает, и метод возвращает '
Мой код вызова:
private void sendConfirmRequest(XmlManipulator requestXML)
{
file.WriteLine("Sending CONFIRM Request!");
AsyncCallback callBack = new AsyncCallback(processConfirmXML); // assign the callback method for this call
IAsyncResult r = conn.BeginProcessOperations(requestXML, callBack, AsyncState);
System.Threading.WaitHandle[] waitHandle = { r.AsyncWaitHandle }; // set up a wait handle so that the process doesnt automatically return to the ASPX page
System.Threading.WaitHandle.WaitAll(waitHandle, -1);
}
Мой код обработчика:
/*
* Process the response XML from the CONFIRM Connector
*/
private static void processConfirmXML(IAsyncResult result)
{
try
{
file.WriteLine("Received Response from CONFIRM!");
if(result == null)
{
file.WriteLine("RESPONSE is null!!");
}
if(conn == null)
{
file.WriteLine("conn is null!!");
}
file.WriteLine("Is Completed : " + result.IsCompleted);
XmlNode root = conn.EndProcessOperations(result);
file.WriteLine("got return XML");
//writeXMLToFile("C:/response.xml",root.InnerXml);
file.WriteLine(root.InnerXml);
Может кто-нибудь посоветовать, правильно ли я обрабатываю этот код, и есть ли у кого-нибудь представление о том, почему мой код случайно бомбит после этой строки в обработчике:
XmlNode root = conn.EndProcessOperations(result);
Спасибо за вашу помощь, Пол
1 ответ
Спасибо за поиск, но я решил свою проблему. Похоже, проблема связана с моей операцией обратного вызова.
Я изменил код для вызова моих методов begin & end в одном и том же блоке кода, и с тех пор у меня не было проблем.
private void sendConfirmRequest(XmlManipulator requestXML)
{
//ConfirmConnector conn = new ConfirmConnector();
file.WriteLine("Sending CONFIRM Request!");
//AsyncCallback callBack = new AsyncCallback(processConfirmXML); // assign the callback method for this call
//IAsyncResult r = conn.BeginProcessOperations(requestXML, callBack, AsyncState);
//System.Threading.WaitHandle[] waitHandle = { r.AsyncWaitHandle }; // set up a wait handle so that the process doesnt automatically return to the ASPX page
//System.Threading.WaitHandle.WaitAll(waitHandle, -1);
file.WriteLine("Calling BeginProcessOperations");
IAsyncResult result = conn.BeginProcessOperations(requestXML, null, null);
// Wait for the WaitHandle to become signaled.
result.AsyncWaitHandle.WaitOne();
file.WriteLine("Calling EndProcessOperations");
XmlNode root = conn.EndProcessOperations(result);
processConfirmXML(root);
file.WriteLine("got return XML");
//writeXMLToFile("C:/response.xml",root.InnerXml);
file.WriteLine(root.InnerXml);
// Close the wait handle.
result.AsyncWaitHandle.Close();
}
Спасибо
Павел