2012-06-03 2 views
7

나는 다음과 같은 URL에 액세스하는 이상한 문제가 http://xn--fanbys-exa.org/episodes.m4a.rss : 여기HttpWebRequest를 실패 접근

http://xn--fanbys-exa.org/episodes.m4a.rss


request.EndGetResponse (와 응답을 읽기
void WebRequestButton_Click(object sender, RoutedEventArgs e) 
    { 
     string url = "http://xn--fanbys-exa.org/episodes.m4a.rss"; 

     if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) 
     { 
      HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url); 
      if (webRequest != null) 
      { 
       webRequest.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), webRequest); 
      } 
     } 
    } 

    private void ReadWebRequestCallback(IAsyncResult callbackResult) 
    { 
     HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState; 
     HttpWebResponse response = null; 

     try 
     { 
      response = (HttpWebResponse)request.EndGetResponse(callbackResult); 
     } 
     catch (Exception e) 
     { 
      System.Diagnostics.Debug.WriteLine(e); 
     } 

     if (response != null) 
     { 
      using (StreamReader httpwebStreamReader = new StreamReader(response.GetResponseStream())) 
      { 
       string results = httpwebStreamReader.ReadToEnd(); 
       System.Diagnostics.Debug.WriteLine(results); 
      } 

      response.Close(); 
     } 
    } 


)이이 예외 : 코드입니다 예외 :

A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll 
System.ArgumentException ---> System.ArgumentException: The parameter is incorrect. 
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
    at MS.Internal.XcpImports.WebRequest_Send(InternalWebRequest request) 
    at MS.Internal.InternalWebRequest.Send() 
    at System.Net.Browser.ClientHttpWebRequest.PrepareAndSendRequest(String method, Uri requestUri, Stream requestBodyStream, WebHeaderCollection headerCollection, CookieContainer cookieContainer) 
    at System.Net.Browser.ClientHttpWebRequest.BeginGetResponseImplementation() 
    at System.Net.Browser.ClientHttpWebRequest.InternalBeginGetResponse(AsyncCallback callback, Object state) 
    at System.Net.Browser.ClientHttpWebRequest.BeginGetResponse(Async'UI Task' (Managed): Loaded 'System.Runtime.Serialization.dll' 


지금까지 내가

http://xn--fanbys-exa.org/episodes.m4a.rss

이 wellformed되는 URL을 말할 수 있습니다.
시도한 모든 브라우저에서 처리 할 수 ​​있습니다.

Fiddler를 테스트하면 Windows Phone 에뮬레이터에서 HTTP 요청을 보내지 않고 있음을 알 수 있습니다.

(활성 피들러 인스턴스) 여러 URL을 시도한 경우

string url = "http://xn--fanbys-exa.org/episodes.m4a.rss"; 
    // not ok --> System.ArgumentException: The parameter is incorrect. 

string url = "http://xn--fanbys-exa.org"; 
    // not ok --> System.ArgumentException: The parameter is incorrect. 

string url = Uri.EscapeUriString("http://xn--fanbys-exa.org/episodes.m4a.rss"); 
    // not ok --> System.ArgumentException: The parameter is incorrect. 

string url = "http://stackoverflow.com";   
    // ok, HTTP request is sent and response is received 

string url = "http://stack--overflow.com";  
    // ok, HTTP request is sent and response is received 

string url = "http://xn--stackoverflow.com";  
    // ok, HTTP request is sent and response 502 is received 
    // --> System.Net.WebException: The remote server returned an error: NotFound. 

문제는 에뮬레이터 및 장치에서 재생 될 수있다.
내 생각에 DNS와 관련된 것 같습니다.
나는 참조 된 웹 사이트 및 해당 DNS 항목을 제어 할 권한이 없습니다.

아이디어가 있으십니까?

+0

그것을 밖으로 시도하고 그것은 참으로 이상한 일이다 :

 const string url = "http://xn--fanbys-exa.org/episodes.m4a.rss"; var wc = new WebClient(); wc.DownloadStringCompleted += (o, args) => { Debug.WriteLine(args.Result); }; wc.DownloadStringAsync(new Uri(url, UriKind.Absolute)); 

수익률 :

은 당연히, 웹 클라이언트도 유사한 문제를 보여줍니다. 코드는 fanboss.org/도메인에있는 URL을 제외한 모든 URL을 사용하여 매력처럼 작동합니다. –

답변

0

그래도이 문제를 확인할 수 있으며 피들러에서도 트래픽이 발생하지 않습니다. 가장 이상한 오류!

string url = "http://a--b-c.org"; - Fine 
    string url = "http://xn--fanbys-exa.org"; - Error 
    string url = "http://xn--2fanbys-exa.org"; - Error 
    string url = "http://xn--fanbys2-exa.org"; - Error 
    string url = "http://xn--fan2bys-exa.org"; - Error 
    string url = "http://xn-fanbys-exa.org"; - Fine 
    string url = "http://xn--b-exa.org"; - Fine 
    string url = "http://xn--f.org"; - Fine 
    string url = "http://a--fanbys-exa.org"; - Fine 
    string url = "http://xn--fanbys-c.org"; - Fine 
    string url = "http://xn--fanbys-exa2.org"; - Fine 
    string url = "http://2xn--fanbys-exa.org"; - Fine 
    string url = "http://xn--f-exa.org"; - Fine 
    string url = "http://xn--fs-exa.org"; - Error 
    string url = "http://x--fs-exa.org"; - Fine 
    string url = "http://xn--fs.org"; - Fine 
    string url = "http://xn--fs-.org"; - Fine 
    string url = "http://xn--fs-e.org"; - Fine 
    string url = "http://xn--fs-ea.org"; - Fine 
    string url = "http://xn--fs-ex.org"; - Fine 
    string url = "http://xn--fs-exx.org"; - Error 
    string url = "http://xn--fs-eee.org"; - Error 
    string url = "http://aa--aa-aaa.org"; - Fine 
    string url = "http://aa--aa-eee.org"; - Fine 
    string url = "http://xa--aa-eee.org"; - Fine 
    string url = "http://xa--fs-eee.org"; - Fine 
    string url = "http://zn--fs-eee.org"; - Fine 
    string url = "http://xn--fa-eee.org"; - Error 
    string url = "http://xn--faa-eee.org"; - Error 
    string url = "http://xn--faaaaaaaaaaaaa-eee.org"; - Error 
    string url = "http://xn--faaaaaaaaaaaaaeee.org"; - Fine 

흥미롭게도, 예외는 이미 'EndGetResponse'전에 발생 - 당신은 그냥 'EndGetResponse'전에 개인 필드 '_exception'에 보면라고합니다.

System.Net.WebException was unhandled 
    Message=An exception occurred during a WebClient request. 
    StackTrace: 
     at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 
     at System.Net.DownloadStringCompletedEventArgs.get_Result() 
     at OddballHttp.MainPage.<MainPage_Loaded>b__0(Object o, DownloadStringCompletedEventArgs args) 
     at System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e) 
     at System.Net.WebClient.DownloadStringOperationCompleted(Object arg) 
     at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark) 
     at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark) 
     at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
     at System.Delegate.DynamicInvokeOne(Object[] args) 
     at System.MulticastDelegate.DynamicInvokeImpl(Object[] args) 
     at System.Delegate.DynamicInvoke(Object[] args) 
     at System.Windows.Threading.DispatcherOperation.Invoke() 
     at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority) 
     at System.Windows.Threading.Dispatcher.OnInvoke(Object context) 
     at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args) 
     at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args) 
     at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult) 
    InnerException: System.ArgumentException 
     Message="" 
     StackTrace: 
       at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
       at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
       at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) 
       at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result) 
       at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2) 
       at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state) 
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
       at System.Threading.ThreadPool.WorkItem.doWork(Object o) 
       at System.Threading.Timer.ring() 
     InnerException: System.ArgumentException 
       Message=The parameter is incorrect. 
       StackTrace: 
        at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
        at MS.Internal.XcpImports.WebRequest_Send(InternalWebRequest request) 
        at MS.Internal.InternalWebRequest.Send() 
        at System.Net.Browser.ClientHttpWebRequest.PrepareAndSendRequest(String method, Uri requestUri, Stream requestBodyStream, WebHeaderCollection headerCollection, CookieContainer cookieContainer) 
        at System.Net.Browser.ClientHttpWebRequest.BeginGetResponseImplementation() 
        at System.Net.Browser.ClientHttpWebRequest.InternalBeginGetResponse(AsyncCallback callback, Object state) 
        at System.Net.Browser.ClientHttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state) 
        at System.Net.WebClient.DownloadBits(WebRequest request, Stream writeStream, CompletionDelegate completionDelegate, AsyncOperation asyncOp) 
        at System.Net.WebClient.DownloadStringAsync(Uri address, Object userToken) 
        at System.Net.WebClient.DownloadStringAsync(Uri address) 
        at OddballHttp.MainPage.MainPage_Loaded(Object sender, RoutedEventArgs e) 
        at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
        at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)