2014-01-30 7 views
3

나는 내가 URL 요청을 전송하고 응답을 수신전송 연결에서 데이터를 읽을 수 없습니다 :

public String GenerateXML(String q)// Here 'q' is the URL 
{ 
    // Generating the XML file for reference 
    // Getting the response in XML format from the URL 

    Debug.WriteLine("The Http URL after URL encoding :" + q); 
    try 
    { 
     Uri signs1 = new Uri(q); 
     //Debug.WriteLine("The Requested URL for getting the XML data :" + re); 

     WebRequest request1 = WebRequest.Create(signs1); 

     HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse(); 

     //HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse(); 

     Stream receiveStream = response1.GetResponseStream(); 

     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 

     String ab = readStream.ReadToEnd();// The mentioned error is showing up here. 
     // Debug.WriteLine("The data :"+a); 
     //XmlDocument content2 = new XmlDocument(); 

     // content2.LoadXml(ab); 

     // content2.Save("C:/Users/Administrator/Downloads/direct.xml"); 
     return ab; 
    } 
    catch (System.Net.WebException ex) 
    { 
     Debug.WriteLine("Exception caught :" + ex); 
     return null; 
    } 
} 
같은 문자열로 저장하고 코드가 기존 연결이 강제로 C#으로 원격 호스트에 의해 폐쇄되었다

원격 호스트가 연결을 닫는 이유는 무엇입니까? 오류를 없애거나 적어도 오류를 무시하고 다른 URL 요청을 계속할 수있는 방법은 무엇입니까? 나는 모든 오류를 피하기 위해 try and catch를 포함 시켰습니다. 솔루션을 찾기 위해 인터넷을 샅샅이 뒤졌지만이 특정 문제에 대한 해결책은 매우 구체적입니다. 제발 도와주세요. 미리 감사드립니다.

+0

아마도 서버가 다른 URL을 요구할 수도 있습니다. 어쩌면 요청시 일부 특수 헤더가 필요합니다. 인증 등이 필요합니다 ... –

+0

@ L.B이 문제를 무시하고 다른 URL로 진행하는 방법은 무엇입니까? 나는 이미 시험해보고 잡아야한다. 그 밖의 무엇을해야 하는가? – user3188390

+0

시도/캐치가 많이 도움이되지 않습니다. 문서를 찾거나 작동 코드가 있으면 보내고받는 것을보기 위해 피들러를 사용하십시오. –

답변

3

실제 예외는 아마도 IOException 일 것입니다. 예외 유형은 물론 WebException을 알아야합니다. 실제 문제는 URL이 오래되어 시스템이 더 이상 웹 서버를 실행하지 않거나 @ L.B가 제안하는대로 요청을 인증해야하거나 헤더가 필요할 수도 있다는 것입니다.

또한 모든 종류의 리소스가 누출 될 수 있습니다. WebResponse와 스트림을 using 문으로 묶어야합니다.

using (var response = (HttpWebResponse)request.GetResponse()) 
using (var receiveStream = response.GetResponseStream()) 
using (var reader = new StreamReader(receiveStream)) 
{ 
    var content = reader.ReadToEnd(); 
    // parse your content, etc. 
} 
+0

이봐 난 내 코드가 HttpWebResponse 클래스 = DirectCast으로 희미한 payResp이다 동일한 문제 (payReq.GetResponse(), HttpWebResponse 클래스)을 가로 질러왔다 희미한 SR로 새로운에서는 StreamReader (payResp.GetResponseStream()) 문자열 = sr.ReadToEnd으로 희미한 응답() sr.Close() – Vivekh

3

다른 호스트에서 연결이 강제로 닫히는 것과 비슷한 문제가있었습니다. WebRequest 개체의 다양한 속성을 변경하여 문제를 해결할 수 있습니다.

다음과 같은 연구 결과는 briancaos하여 블로그 게시물에 설명했다 : 위의 포스트에서 언급 An existing connection was forcibly closed by the remote host

단계를 포함

설정을 WebRequest.KeepAliveFalse에.

집합을 WebRequest.ProtocolVersion에서 HttpVersion.Version10으로 설정하십시오.

설정 WebRequest.ServicePoint.ConnectionLimit

그것은 정말 나를 위해 작동,하지만 난 아직 여러 호스트에 그것을 테스트하지 않은 1합니다. 그러나, 나는 진지하게 그것이 더 자세하게가는 것에 따라 지위를 읽는 것을 제안한다.

링크가 깨진 경우에는 Archive.org cached version을 참조하십시오.

관련 문제