2012-11-11 3 views
1

작업의 일부로 활용해야하는 ASMX 웹 서비스가 있습니다. ASPX 페이지를 통해이 서비스를 호출하여 제 3 자 시스템에서 새 항목을 만듭니다. 나는 그 서비스에 대한 기본 코드에 접근 할 수 없다. 단순히 다른 시스템과 통신 할 수있게 해준다.C# ASMX 웹 서비스 호출

나는 서비스를 올바르게 부르고 있는지 알아내는 데 어려움을 겪고 있으며, 누군가 조언을 해줄 수 있는지 궁금합니다.

나는 ASMX 페이지를 설치했고 이것이 나에게 BeginProcessOperations 메소드라고 부르는 'ConfirmConnector'클래스를 주었다. 돌아와서 결과를 파싱 할 때까지 기다리고 싶습니다. 결과는 내가 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); 

도움을 주셔서 감사합니다. Paul

+0

에 오신 것을 환영합니다! 종종 "감사"등이나 이름을 포함 할 필요가 없습니다. 우리는 당신이 도움에 대해 감사하다는 것을 알고 암묵적이며 당신의 이름은 이미 질문의 왼쪽 하단에 있습니다. :) – Patrick

+0

죄송합니다 - 죄송합니다. 잊어 버렸습니다. 나는 약 5 번 질문을 다시 말하고 그 위에 복사해야만한다. –

+0

미리 답변 해 주신 모든 분께 –

답변

0

고마워.하지만 내 문제가 해결되었습니다. 이 문제는 내 콜백 작업과 관련이있는 것으로 보입니다.

동일한 코드 블록에서 내 begin & 최종 메서드를 호출하도록 코드를 변경 했으므로 그 이후로 문제가 발생했습니다.

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(); 
} 

감사

바울에게 유래하는