.net HttpWebRequest/HttpWebResponse向服务器发出两个调用
下面是我用来将数据发布到基于REST的服务器的代码片段。如果我开始在服务器上调试,我会看到两个独立的请求通过。我想知道的是为什么 由于第二次呼叫,我的请求失败。如果我调试,它会显示第一个请求处理得很好,但是当我尝试在客户端读取响应时,它会将新的调用发送到服务器,而该请求的身份验证失败 在下面的内联注释中,对服务器的2个调用将触发.net HttpWebRequest/HttpWebResponse向服务器发出两个调用,.net,c#-4.0,httpwebrequest,.net,C# 4.0,Httpwebrequest,下面是我用来将数据发布到基于REST的服务器的代码片段。如果我开始在服务器上调试,我会看到两个独立的请求通过。我想知道的是为什么 由于第二次呼叫,我的请求失败。如果我调试,它会显示第一个请求处理得很好,但是当我尝试在客户端读取响应时,它会将新的调用发送到服务器,而该请求的身份验证失败 在下面的内联注释中,对服务器的2个调用将触发 string requestUri = "/Service/Contacts"; HttpWebRequest httpWebRequ
string requestUri = "/Service/Contacts";
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(SERVICEBASEURI + requestUri);
httpWebRequest.Headers.Add(AUTHENTICATE, m_AuthenticationKey);
httpWebRequest.Headers.Add(UTCTIMESTAMP, m_UtcTime.ToString("yyyy'-'MM'-'dd HH':'mm':'ss'Z'"));
httpWebRequest.Headers.Add(NONCE, m_NonceValue);
httpWebRequest.Accept = "*/*";
httpWebRequest.UserAgent = "Test-Framework";
httpWebRequest.Method = "POST";
string postData = "instance={\"FullName\":\"Altonymous\"}";
byte[] postDataBytes = new ASCIIEncoding().GetBytes(postData);
// TODO: Add postData to the Payload. Needs to be done on authorization side as well.
string requestPayload = GetPayload(requestUri);
httpWebRequest.Headers.Add(AUTHORIZATION, requestPayload);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = postDataBytes.Length;
Stream stream = httpWebRequest.GetRequestStream();
// First call fires off to the server. I didn't expect it to happen here...
stream.Write(postDataBytes, 0, postDataBytes.Length);
stream.Close();
// Second call fires off to the server. This is where I expected it to happen.
using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
Assert.AreEqual(HttpStatusCode.OK, httpWebResponse.StatusCode);
Stream responseStream = httpWebResponse.GetResponseStream();
StreamReader responseStreamReader = new StreamReader(responseStream);
string resultString = responseStreamReader.ReadToEnd();
Assert.IsNotNullOrEmpty(resultString);
}
试试这个~
httpWebRequest.ServicePoint.ConnectionLimit = 10;
这似乎是Microsoft测试设计中的一个错误 您能解释一下这将如何阻止第二个事件向服务器发起另一个调用吗?为什么您不希望在开始向服务器写入流后,服务器已被联系并与之打开TCP/IP连接?坦白地说,我对GetResponse联系服务器更感到困惑。老实说,我和你期望的一样。然而,当我阅读文档时,它让我相信情况应该是相反的。无论哪种方式,两次调用都是致命的。您能澄清一下“这是Microsoft测试设计中的一个bug”是什么意思吗?我也有同样的问题。你做了什么来阻止第二个被解雇到服务器上?我切换到RubyonRails,把那个头痛的问题抛在脑后。不,我以前从未用过。但我很高兴我换了。