none
為什麼不能捕捉這個 'System.UriFormatException' ?? RRS feed

  • 問題

  • 第一個可能發生的例外狀況類型 'System.UriFormatException' 發生於 System.dll

    輸出框不斷提示這個問題,同一個function 卻一些地方可以如常通過,一些地方卻shutdown..

    string url 已經檢查多次..沒有問題的

    如何解決這個問題?

     

    Code Snippet

    public static string GetMethod(string url)
            {
                HttpWebResponse httpResponse = null;
                StreamReader streamReader = null;

                try
                {
                    Uri uri = new Uri(url);
                    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(uri);
                    httpResponse = (HttpWebResponse)httpRequest.GetResponse();

                    streamReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8);
                    string res = streamReader.ReadToEnd();
                    return res;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString()); // 沒有顯示 UriFormatException?
                    return null;
                }
                finally
                {
                    if (streamReader != null)
                    {
                        streamReader.Close();
                    }

                    if (httpResponse != null)
                    {
                        httpResponse.Close();
                    }
                   
                }

            }

     

     

     

    2008年5月1日 上午 04:54

解答

所有回覆

  • 建議你用除錯器去看才會比較清楚,因為程式碼似乎看不出有問題。

     

    2008年5月1日 上午 04:58
  • 我逐行運行..

    當運行到這行:httpResponse = (HttpWebResponse)httpRequest.GetResponse();

    輸出窗框提示:

    第一個可能發生的例外狀況類型 'System.UriFormatException' 發生於 System.dll
    0x964ecec2 執行緒以返回碼 0 (0x0) 結束。
    0x360d6e1e 執行緒以返回碼 0 (0x0) 結束。
    0x964ecec2 執行緒以返回碼 0 (0x0) 結束。

     

    ----------------------------------------------

     

    程序依然繼續運行.轉行另一個Form.並沒有進入 Exception 區域.

    2008年5月1日 上午 05:08
  • Hi,

    第一個可能發生的例外狀況類型 'System.UriFormatException' 發生於 System.dll是編譯器提示你在這邊有可能會發生這個例外狀況,並不表示一定會有錯誤發生,您確定錯誤是發生在這邊嗎?

     

    2008年5月2日 上午 03:55
    版主
  •  bauann 寫信:

    Hi,

    第一個可能發生的例外狀況類型 'System.UriFormatException' 發生於 System.dll是編譯器提示你在這邊有可能會發生這個例外狀況,並不表示一定會有錯誤發生,您確定錯誤是發生在這邊嗎?

     

     

    httpResponse = (HttpWebResponse)httpRequest.GetResponse();

     

    但為什麼當運行這句..整個程序停止.沒有反應了.即使在除錯模式也是這樣..突然停頓.像hanging

    這個情形並不是每一次都是這樣..某時可以,某時錯誤..

    有什麼可能性導致這樣?

    2008年5月2日 上午 07:05
  • HI,

     

    有可能是Server忙碌的關係, 有時反應較慢

     

    tihs

    2008年5月2日 上午 07:41
  • 有可能真是這個問題..因為經常從server 取數據...

    有什麼方法..防止這個..疑假死的情況..

    2008年5月2日 下午 12:08
  • 可以改用非同步呼叫,請參考下面網頁說明

     

    HttpWebRequest..::.BeginGetResponse 方法

    http://msdn.microsoft.com/zh-tw/library/system.net.httpwebrequest.begingetresponse.aspx

     

    2008年5月2日 下午 12:20
    版主
  •  tihs 寫信:

    HI,

     

    有可能是Server忙碌的關係, 有時反應較慢

     

    tihs

     

    httpResponse = (HttpWebResponse)httpRequest.GetResponse();

    真是這個問題.等了很久才出現.."The operation has timed out"

     

    BUG: http://support.microsoft.com/kb/815209

     

    根據這個解決: 我根本沒有多餘的通訊協定或網路介面卡...

     

     

    2008年5月2日 下午 02:08
  • HI,

     

    您可以修改程式, 發現timeout後再執行重試

     

    tihs

    2008年5月3日 上午 08:39