2011-09-22 2 views
2

Windows Phone 7 프로젝트에 작성된 함수가 있습니다. 각 HttpWebRequest의 컨텐트 헤더를 추적 할 것이고 컨텐트 유형이 문서 (예 : 웹 메일의 pdf 첨부 파일) 인 경우 다운로드 할 것입니다. 이 함수는 파일 이름이 영어 인 경우 잘 작동합니다. 그러나 파일 이름이 ASCII가 아니며 중국어와 일본어를 사용하면 (HttpWebResponse) m_responseRequest.EndGetResponse (m_responseCallbackAsyncResult)에 System.ArgumentException이 발생합니다. 그것을 고치는 방법? 내가 중국어로 지명 된 많은 파일을 처리 할 필요가있을 때 그것은 나에게 중요하다.System.Net.Browser.ClientHttpWebRequest.EndGetResponse throws System.ArgumentException 헤더에 ASCII가 아닌 콘텐츠가 포함 된 경우

private void _checkHeader(string m_uri) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_uri); 
     request.Method = "POST"; 

     request.BeginGetRequestStream((asynchronousResult) => 
     { 
      var m_readCallBackrequest = (HttpWebRequest)asynchronousResult.AsyncState; 
      m_readCallBackrequest.BeginGetResponse((m_responseCallbackAsyncResult) => 
      { 
       var m_responseRequest = (HttpWebRequest)m_responseCallbackAsyncResult.AsyncState; 
       try 
       { 
        var resp = (HttpWebResponse)m_responseRequest.EndGetResponse(m_responseCallbackAsyncResult); 
        Debug.WriteLine(resp.Headers.ToString()); 

       } 
       catch (WebException) { } 
      }, m_readCallBackrequest); 
     }, request); 
    } 

그리고 예외 세부 사항 :

System.ArgumentException이 처리되지 않은했다 메시지 = "" 스택 트레이스 : System.Net.Browser.AsyncHelper.BeginOnUI에서 (SendOrPostCallback 다음은 내 코드입니다 beginMethod, Object state) 에서 System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) at FotomaxWP71.ViewModel.WebViewModel. < checkHeader> b _d (IAsyncResult m_responseCallbackAsyncResult) at System.Net.Browser.ClientHttpWebRequest. 시스템에서 System.Threading.ThreadPool.WorkItem.WaitCallback_Context (객체 상태)에서 System.Threading.ExecutionContext.Run (ExecutionContext에 ExecutionContext에, ContextCallback 콜백, 객체 상태)에서 <> C_ DisplayClassa.b _8 (객체 상태 2) System.Threading.Timer.ring에서 .Threading.ThreadPool.WorkItem.doWork (객체 O) () 의 InnerException : System.ArgumentException 메시지 = net_WebHeaderInvalidControlChars] 인수 : 디버깅 리소스 문자열이 불가능하다. 키와 인수는 종종 문제를 진단하기에 충분한 정보를 제공합니다. http://go.microsoft.com/fwlink/?linkid=106663&Version=4.7.60408.0&File=System.Net.dll&Key=net_WebHeaderInvalidControlChars 매개 변수 이름을 참조하십시오 스택 트레이스 이름 : System.Net.WebHeaderCollection.set_Item (문자열 이름, 문자열 값) System.Net.Browser에서 에서 System.Net.ValidationHelper.CheckBadWebHeaderChars에서 (문자열 이름, 부울 isHeaderValue) 을. HttpWebRequestHelper.AddHeaderToCollection (WebHeaderCollection headerCollection, 문자열 헤더 이름, 문자열 headerValue라는) 시스템에서 System.Net.Browser.HttpWebRequestHelper.ParseHeaders (열린 우리당 requestUri, SecurityCriticalDataForMultipleGetAndSet`1 헤더, WebHeaderCollection 수집, 부울 removeHttpOnlyCookies, HttpStatusCode & 상태, 문자열 & 상태 설명) 에서 .Net.Browser.ClientHttpWebRequest.Progress (개체 보낸 사람, EventArgs 전자)MS.Internal.JoltHelper.FireEvent에서 MS.Internal.CoreInvokeHandler.InvokeEventHandler (INT32 typeIndex, 위임 handlerDelegate, 개체 보낸 사람, 개체 인수) (IntPtr입니다 unmanagedObj, IntPtr입니다 unmanagedObjArgs, INT32 argsTypeIndex, INT32 actualArgsTypeIndex, 문자열 EVENTNAME)에서 17,451,515,

고맙습니다.

+1

아마도, 웹 서버가 내용 ​​- 처리 헤더에 올바르게 ASCII가 아닌 파일 이름을 인코딩하지 않습니다. 일부 도구 (예 : 피들러)를 사용하여 웹 서버 응답 헤더를 검사하여 문제인지 확인합니다. 이 인코딩이 어떻게되어 있는지 이해하려면 다음 링크를 참조하십시오 : http://www.motobit.com/help/scptutl/pa97.htm - 물론 웹 서버를 제어 할 수있는 경우에만 문제가 해결됩니다. – VinayC

답변

1

변경이에 try{}의 코드 :

var resp = (HttpWebResponse)m_responseRequest.EndGetResponse(m_responseCallbackAsyncResult); 
byte[] buf = new byte[resp.Headers.ToString().Length]; 
buf = resp.Headers.ToString().ToCharArray(); 
Debug.WriteLine(buf); 
관련 문제