2017-10-11 9 views
0

이 문제에 대한 몇 가지 다른 스레드를 보았지만 해결 방법을 찾지 못했습니다. C# Windows를 실행할 때 디버그 모드에서 WebClient를 사용하여 웹 페이지의 데이터를 읽을 수 있습니다. 그러나 응용 프로그램의 실행 파일을 만들 자마자 웹 페이지에서 데이터를 읽을 수 없습니다. 여기에 내가 얻는 예외 :System.Net.WebException : 기본 연결이 닫혔습니다 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다

System.Net.WebException : 내부 연결이 닫혔습니다 : 보내기에 예기치 않은 오류가 발생했습니다. ---> System.IO.IOException : 전송 연결에서 데이터를 읽을 수 없습니다 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다. ---> System.Net.Sockets.SocketException : System.Net.Sockets.Socket.Receive (Byte [] 버퍼, Int32 오프셋, Int32 크기, SocketFlags 소켓 플래그)에서 의 기존 연결이 강제로 닫혔습니다 System.Net.Sockets.NetworkStream.Read에서 (바이트 [] 버퍼 오프셋 INT32, INT32 크기)

는 --- 내부 예외 스택 추적 --- 끝 여기

는 I 코드의 단편이다 사용하고 있습니다 :

WebClient webClient = new WebClient(); 
webClient.UseDefaultCredentials = true; 
webClient.Proxy.Credentials = CredentialCache.DefaultCredentials; 
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
string page = webClient.DownloadString(webPath + manPartNum); 

이전에 말씀 드렸듯이 디버그에서 올바르게 작동하도록 할 수 있습니다. 비주얼 스튜디오의 모드이지만, 실행 파일을 생성하자마자 더 이상 웹 페이지에서 읽을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 이 문제의 원인은 무엇입니까?

+0

가능성은 거의 없습니다. 1) 컴파일러와의 종속성 문제로 인해 변경된 모든 내용이 실행 파일에 포함되지 않았습니다. 따라서 프로젝트를 완전히 다시 빌드 할 bin 폴더를 삭제할 수 있으므로 릴리스 모드가 다시 빌드됩니다. 2) 코드가 처음 작동합니다. 그러나 두 번째로 쿠키가 설정되고 쿠키가있는 코드를 실행하는 데 문제가 있습니다. IE 및 쿠키를 포함한 기록을 삭제하고 다시 시도하십시오. 또는 디버그 버전으로 돌아가서 여전히 작동하는지 확인하십시오 .3) 이전 연결이 닫히지 않고 서버가 동일한 IP 주소에서 둘 이상의 연결을 허용하지 않습니다. – jdweng

+1

'UseDefaultCredentials'가 아니고 현재 공급하는 사용자 자격 증명에 충돌이 있습니까? 디버그에서 "성공"중이면 출력 창을 살펴볼 것입니다. 디버깅에서도 문제가 발생하지 않았는지 확인해야하지만, 아무렇게나 빠져 나갈 수는 있습니다. – DonBoitnott

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 너의 제안을 시도했다. 1) bin 폴더를 삭제하고 프로젝트를 완전히 다시 빌드했습니다. 성공하지 못했습니다. 2) 디버그 모드에서 프로그램을 다시 실행했지만 여전히 디버그 모드에서 올바르게 작동합니다. 3) 웹 클라이언트를 닫을 수있는 방법이 있습니까? weblient.Close()? –

답변

0

대안이 대신 HttpWebRequest 사용하는 것입니다 :

String responseFromServer = null; 
var url = webPath + manPartNum; 
var request = (HttpWebRequest)HttpWebRequest.Create(urlPing); 
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"; 
var response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusCode == HttpStatusCode.OK) 
{ 
    using (var dataStream = response.GetResponseStream()) 
    { 
     using (var reader = new StreamReader(dataStream)) 
      responseFromServer = reader.ReadToEnd(); 
    } 
} 

if (!String.IsNullOrEmpty(responseFromServer)) 
{ 
} 

당신이 진정하지 않는 한 "의 loggin에"페이지로, WebClient의 사용은 불필요 할 수 있습니다. 필요한 경우 페이지 응답을 요청하는 것이므로 모든 인증 문제가 발생하지 않도록해야합니다.

+0

다시 한번 감사드립니다. 그러나 WebClient와 동일한 HttpWebRequest 오류가 발생합니다. 내 문제는 내가 접속하려고하는 웹 사이트와 더 관련이 있다고 생각합니다.예를 들어, 하나의 배포자 웹 사이트에 액세스 할 수 있지만 다른 웹 사이트에는 액세스 할 수 없습니다. 웹 사이트는 내 응용 프로그램이 로봇이라는 것을 인식하는 것 같습니다. –

+0

@TylerWilson 그리고 아마 그것은 비슷한 빈도로 연결을 제한합니다. 간헐적 인 패턴은 너무 가까워지기 때문에 발생할 수 있습니다. DDoS 방지 등. – DonBoitnott

+0

이 DDoS 방지를 피할 수있는 방법이 있습니까? 분명히 이유가 있습니다. 내 코드에 지연을 추가하면이 문제가 발생합니까? –

0

더 많은 조사를 한 후 액세스하려는 웹 사이트에 OAuth 2.0 인증 및 승인이 있는지 확인할 수있었습니다. 회사에 등록하고 API를 사용하여 내 웹 사이트에 액세스해야합니다. 희망적으로 이것은 다른 사람을 돕는다.