2016-10-07 8 views
-1

나는 다시 XML을 반환 전화를 걸려면 다음과 같은 코드를 가지고 :System.Net.WebException : 서버에서 프로토콜 위반이 발생했습니다

private string Send(string url) 
{ 
    try 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       using (StreamReader reader = new StreamReader(stream)) 
       { 
        return reader.ReadToEnd(); 
       } 
      } 
     } 
    } 
    catch (WebException ex) 
    { 
     var _status = ex.Status.ToString(); 
     if (ex.Status == WebExceptionStatus.ProtocolError) 
     { 
      _status = ((HttpWebResponse)ex.Response).StatusCode.ToString(); 
     } 
     Trace.WriteLine(_status.ToString()); 
    } 

    return "error"; 
} 

(항상) 나는

을 얻을 대부분의 시간

System.Net.WebException : 서버가 프로토콜 위반을 커밋했습니다.

절 = System.Net.HttpWebRequest.GetResponse에서 ResponseStatusLine() 슬로우

예외.

나는 <configuration> 섹션에서 직접 제의 App.config이 추가되었습니다 :

<system.net> 
    <settings> 
    <httpWebRequest useUnsafeHeaderParsing="true"/> 
    </settings> 
</system.net> 

하지만 난 오류가 계속.

+4

대상/URL은 어떤 종류입니까? http/https? 어떤 종류의 서버가 목적지에 있습니까, 어떤 http 서버입니까? Fiddler를 사용하여 통신 단계가 무엇인지 확인하려고합니다. http://stackoverflow.com/questions/2482715/the-server-committed-a-protocol-violation-section-responsestatusline-error – gerleim

답변

1

설정

request.KeepAlive = false; 
또한

http://www.webmonkeys.org.uk/2012/09/c-the-server-committed-a-protocol-violation-sectionresponsestatusline/#comment-60

, 당신이 과거를 얻을 시도하는 경우는, true로 설정해야 할 때 붙여 넣은 useUnsafeHeaderParsing의 설정 값은이 같은 false로 설정있다 발행물.

+0

붙여 넣기 오류입니다. 코드에서 실제로 "true"로 설정되어 있습니다. 나는 그것을 바로 잡았다. 감사 – keeg

0
request.ServicePoint.Expect100Continue = true; 
관련 문제