2010-05-12 46 views
0

我有一個正在進行網絡請求的時間表任務。這一切工作正常。然而,突然我收到以下錯誤日誌。使用網絡請求時出現417錯誤


12/05/2010 20時21分十七秒 失敗讀取XML System.Net.WebException:遠程服務器返回錯誤:(417)預期失敗。 在System.Net.HttpWebRequest.GetResponse() 在DelegateImport.Update.UpdateLiveSite(字符串delegateId,字符串badgeId) 在DelegateImport.Rss.RssReader()

這裏是代碼使得所述web請求

    WebRequest request = WebRequest.Create (uri); 
        request.Method = "POST";       
        byte[] byteArray = Encoding.UTF8.GetBytes (postData); 
        request.ContentType = "application/x-www-form-urlencoded"; 
        request.ContentLength = byteArray.Length; 
        request.Timeout = 30000000; 
        Stream dataStream = request.GetRequestStream(); 
        dataStream.Write (byteArray, 0, byteArray.Length); 
        dataStream.Close(); 
        WebResponse response = request.GetResponse(); 
        Console.WriteLine (((HttpWebResponse)response).StatusDescription); 
        dataStream = response.GetResponseStream(); 
        StreamReader reader = new StreamReader (dataStream); 
        string responseFromServer = reader.ReadToEnd(); 
        Console.WriteLine (responseFromServer); 
        reader.Close(); 
        dataStream.Close(); 
        response.Close(); 

回答

0

默認情況下,.NET會標記傳出的POST請求,標頭爲Expect: 100-Continue。如果服務器不支持這個,它將失敗,併發生417錯誤。

獲取.NET不這樣做,執行下面的創建WebRequest對象之前:

+0

我已經試過了,像這樣,但沒有運氣 - System.Net.ServicePointManager.Expect100Continue =假; WebRequest請求= WebRequest.Create(uri); – frosty 2010-05-12 20:32:40

+1

在設置此屬性之前,代碼中早些時候的任何機會都會使用相同的URL進行通信? ServicePointManager重用ServicePoints,因此需要在創建任何請求之前首先設置屬性(例如,在應用程序啓動時)。 – 2010-05-12 20:52:55

+0

謝謝eric,我相信你是對的。需要一個快速修復,所以只是用「得到」不理想,但看到我通過:) – frosty 2010-05-15 10:27:51

相關問題