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;