2013-03-27 66 views
0

我在做一個WebRequestUri,但問題是我沒有每次都得到響應。有時我需要重做它。我希望我的程序檢查它是否沒有響應,如果有,程序會自動調用WebRequest的方法,直到我得到響應。HttpWebRequest每次都不起作用

在僞

while(response == null) 
{ 
    try it again 
} 

這是我的職責。資本評論是對我的問題的解釋

private string HttpWebRequest() 
{ 
    string xml = @"<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<Siri version='1.0' xmlns='http://www.siri.org.uk/'> 
    <ServiceRequest> 
    <RequestTimestamp>2011-10-24T15:09:12Z</RequestTimestamp> 
    <RequestorRef><USERNAME></RequestorRef> 
    <StopMonitoringRequest version='1.0'> 
     <RequestTimestamp>2011-10-24T15:09:12Z</RequestTimestamp> 
     <MessageIdentifier>12345</MessageIdentifier> 
     <MonitoringRef>020035811</MonitoringRef> 
    </StopMonitoringRequest> 
    </ServiceRequest> 
</Siri>"; 

    string responseFromServer = null; 

    WebRequest request = WebRequest 
    .Create("http://<USERNAME>:<PASSWORD>@nextbus.mxdata.co.uk/nextbuses/1.0/1"); 

    request.Method = "POST"; 
    string postData = xml; 

    byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = byteArray.Length; 
    Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 

    dataStream.Close(); 


    ////////IF I GET NO RESPONSE EVERYTHING AFTER THE NEXT LINE WILL BE IGNORED 
    WebResponse response = request.GetResponse(); 
    ///////////THIS MESSAGEBOX WILL BE IGNORED 
    MessageBox.Show(((HttpWebResponse)response).StatusDescription+" Completed"); 



    dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    responseFromServer = reader.ReadToEnd(); 

    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 

    return responseFromServer; 
} 

我該如何解決這個問題?

+2

究竟是什麼問題?您提供的僞代碼不會描述您提供的實際代碼,它本身包含的評論並不真正描述您正在討論的內容。至於問題的實際根源,沒有收到答覆,究竟發生了什麼?預計會發生什麼? – David 2013-03-27 11:52:27

+0

我冒昧地清理您的帖子,刪除評論和indending。對我而言,現在閱讀起來要容易一些。如果你覺得有什麼不對,請告訴我。它也可以通過您的文章下的「編輯」按鈕進行更正。 – Default 2013-03-27 14:35:50

回答

0

如果你想如果返回的結果最終被空只是重試..爲什麼不只是這樣做:

private void RunWebrequest() 
{ 
    if (HttpWebRequest() == null) 
    { 
      RunWebrequest(); 
    } 
    else 
    { 
      //continue 
    } 
} 
+0

因爲這個問題在我的代碼中沒有。如果我沒有得到任何迴應,'response = request.getresponse()'下面的所有其他代碼將不會運行... – 2013-03-27 13:06:46

+0

要繼續添加下面的答案...如果它不返回null,試試這個:if(response = =「」)既然你說過你什麼都沒有回來,那麼它可能就是你回來的空字符串。對於系統,空字符串不同,則爲空。因此它會跳過你的檢查null。 – 2013-03-27 13:45:43

+0

現在有沒有什麼建議可以解決你的問題?讓我們知道你的問題可以被標記爲已回答。謝謝。 – 2013-03-28 07:44:42

0

我有同樣的問題,401與此服務器,而不是把你的用戶名&密碼在url中根據traveline文檔使用「證書」代替: -

string travelineUrl = "http://nextbus.mxdata.co.uk/nextbuses/1.0/1";   
var travelineRequest = (HttpWebRequest)WebRequest.Create(travelineUrl); 
travelineRequest.Credentials = new NetworkCredential("yourusername", "yourpassword"); 
相關問題