Вызов веб-службы 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();
}

Спасибо

Павел

Другие вопросы по тегам