Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest没有';我每次都不工作_C#_Httpwebrequest - Fatal编程技术网

C# HttpWebRequest没有';我每次都不工作

C# HttpWebRequest没有';我每次都不工作,c#,httpwebrequest,C#,Httpwebrequest,我正在对一个Uri执行WebRequest,但问题是我没有每次都得到响应。有时我需要重做。我希望我的程序检查它是否没有得到响应,如果是,程序将自动调用WebRequest的方法,直到我得到响应 伪码 while(response == null) { try it again } 这是我的职责。资本评论是对我的问题的解释 private string HttpWebRequest() { string xml = @"<?xml version='1.0' encodin

我正在对一个
Uri
执行
WebRequest
,但问题是我没有每次都得到响应。有时我需要重做。我希望我的程序检查它是否没有得到响应,如果是,程序将自动调用
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;
}
私有字符串HttpWebRequest()
{
字符串xml=@“
2011-10-24T15:09:12Z
2011-10-24T15:09:12Z
12345
020035811
";
字符串responseFromServer=null;
WebRequest=WebRequest
.Create(“http://:@nextbus.mxdata.co.uk/nextbus/1.0/1”);
request.Method=“POST”;
字符串postData=xml;
byte[]byteArray=Encoding.UTF8.GetBytes(postData);
request.ContentType=“application/x-www-form-urlencoded”;
request.ContentLength=byteArray.Length;
Stream dataStream=request.GetRequestStream();
写入(byteArray,0,byteArray.Length);
dataStream.Close();
////////如果我没有得到回应,下一行之后的所有内容都将被忽略
WebResponse=request.GetResponse();
///////////此消息框将被忽略
MessageBox.Show(((HttpWebResponse)response.StatusDescription+“Completed”);
dataStream=response.GetResponseStream();
StreamReader=新的StreamReader(数据流);
responseFromServer=reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
返回responseFromServer;
}

如何解决此问题?

如果返回的结果为空,则只需重试。。为什么不做一些像:

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

我在这台服务器上遇到了同样的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");

究竟是什么问题?您提供的伪代码并不描述您提供的实际代码,而实际代码本身包含的注释并不能真正描述您所谈论的内容。至于问题的实际根源,没有收到响应,实际发生了什么?预计会发生什么?我冒昧地清理了你的帖子,删除了评论和索引。对我来说,现在更容易阅读了。如果你觉得有什么不对劲,一定要告诉我。它也可以通过你帖子下的“编辑”按钮来更正。因为我的代码中没有这个问题。如果我没有收到任何响应,则“response=request.getresponse()”下面的所有其他代码将不会运行…若要继续在该答案下面添加内容。。。如果它没有返回null,请尝试以下操作:if(response==“”)既然您说您没有得到任何回报,那么您得到的回报也可能是一个空字符串。空字符串与系统的null不同。因此,它将跳过您的null检查。现在有任何建议解决了您的问题吗?请告知我们,以便您的问题可以标记为已回答。谢谢。不,很遗憾没有。我无法使用您的解决方案对其进行测试,我在函数response.getResponse()中遇到以下错误:response=request.getResponse();如果未处理(response.ToString()==“”){MessageBox.Show(“failed”);}WebException,则远程服务器返回错误:(401)未经授权。401错误来自未经授权的访问。(凭证问题)这意味着您确实得到了一些东西,因此结果不是空的,而是未处理的。尝试添加凭据,您可以先尝试此操作,然后使用它:request.PreAuthenticate=true;request.Credentials=System.Net.CredentialCache.DefaultCredentials;这可能不是直接的答案,但某些信息告诉我,给定或处理的凭据有问题。请求的另一种方式。可能是解决方案的凭据是request.UseDefaultCredentials=true;