0

我正在做一个WebRequestUri但问题是我每次都没有得到回应。有时我需要重做。我希望我的程序检查它是否没有响应,如果是,程序将自动调用方法,WebRequest直到我得到响应。

在伪代码中

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;
}

我该如何解决这个问题?

4

2 回答 2

0

我在这台服务器上遇到了同样的 401 问题,而不是按照 traveline 文档将您的用户名和密码放在 url 中,而是使用“凭据”:-

string travelineUrl = "http://nextbus.mxdata.co.uk/nextbuses/1.0/1";        
var travelineRequest = (HttpWebRequest)WebRequest.Create(travelineUrl);
travelineRequest.Credentials = new NetworkCredential("yourusername", "yourpassword");
于 2013-06-15T16:15:47.970 回答
0

如果您只想在返回的结果最终为空时重试。为什么不这样做:

private void RunWebrequest()
{
     if (HttpWebRequest() == null)
     {
          RunWebrequest();
     }
     else
     {
          //continue
     }
}
于 2013-03-27T13:02:53.950 回答