2009-12-11 5 views
1

인사말, 모두. 여기에 내 상황이있다. HttpWebRequest를 로컬 처리기 파일로 만들려고하는데 다음 예외가 계속 발생합니다.HttpWebRequest를 로컬 ASHX 파일로 만들 때 IOException

전송 연결에서 데이터를 읽을 수 없습니다 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

이제 사이트에서 사용할 제 3 자용 통합 코드를 작성 중이므로 로컬 처리기 파일을 사용하고 있습니다. 요청할 수있는 테스트 환경이 생길 때까지 기본적으로 프로세스를 로컬 핸들러 파일로 조롱하고 있습니다. 다음은 관련 코드입니다. 감사.

XmlSerializer serializer; 
XmlDocument xmlDoc = null; 

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestUrl); 
webRequest.Method = "POST"; 
webRequest.ContentType = "text/xml"; 
webRequest.KeepAlive = true; 
webRequest.Accept = "*/*"; 

serializer = new XmlSerializer(subRequest.GetType()); 
XmlWriter writer = new XmlTextWriter(webRequest.GetRequestStream(), Encoding.UTF8); 
serializer.Serialize(writer, subRequest); 
writer.Close(); 

xmlDoc = new XmlDocument(); 
xmlDoc.Load(XmlReader.Create(webRequest.GetResponse().GetResponseStream())); 

은 "requestUrl"가 "http://localhost:2718/Handlers/MyHandler.ashx"로 정의된다

WebRequest 클래스 코드 (subRequest 변수는이 코드를 실행하는 방법에 전달 된 객체이다). 나는 핸들러 파일을 잘 치고 코드를 밟을 수있다. 모두 XML 응답을 문자열로 어셈블하여 Response 객체에 씁니다.

context.Response.ContentType = "text/xml"; 
string newSubscriptionId = Utils.GetUniqueKey(); 

StringBuilder sb = new StringBuilder(); 
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
// Assemble XML string here 

context.Response.Write(sb.ToString()); 

내가 알 수있는 한,이 모든 것이 올바르게 작동합니다. 하지만 내 코드가 WebRequest 덩어리의 마지막 줄에 올 때 :

xmlDoc.Load(XmlReader.Create(webRequest.GetResponse().GetResponseStream())); 

예외가 throw되는시기입니다. 어떤 아이디어? 미리 감사드립니다. 당신이 연결을 다시 사용하지 않으려하거나 동일한 스키마/서버/포트에 다른 요청이있을 예정되어 있지 않은 경우

제임스

+0

LOL! 그리고이 질문을 게시하자마자 기다렸던 테스트 환경에 대한 연결 세부 정보를 받았습니다. 재밌 네요. 그러나이 질문에 대한 대답이나 제안은 여전히 ​​감사 할 것입니다. :) –

답변

0

첫째, 나는 false로 KeepAlive를 설정합니다.

문제는 서버가 연결을 종료하거나 끝을지나 읽기와 서버 연결 유지 타임 아웃이 끝나면, 연결이 닫힐 계속 그 전에 XmlDocument.Load()가 전체 스트림을 읽을 수 없다는 것입니다 서버에 의해. 또한 응답 스트림을 종료하지 않습니다. 이 이론이 올바른지 확인하려면 다음과 같이하십시오.

// Optional -> webRequest.KeepAlive = false; 
string xml = null; 
using (StreamReader reader = new StreamReader (webRequest.GetResponse().GetResponseStream())) { 
    xml = reader.ReadToEnd(); 
} 
xmlDoc.LoadXml (xml); 

그런 다음 문제가 해결되는지 확인하십시오.

관련 문제