Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
.net HttpWebRequest/HttpWebResponse向服务器发出两个调用_.net_C# 4.0_Httpwebrequest - Fatal编程技术网

.net HttpWebRequest/HttpWebResponse向服务器发出两个调用

.net HttpWebRequest/HttpWebResponse向服务器发出两个调用,.net,c#-4.0,httpwebrequest,.net,C# 4.0,Httpwebrequest,下面是我用来将数据发布到基于REST的服务器的代码片段。如果我开始在服务器上调试,我会看到两个独立的请求通过。我想知道的是为什么 由于第二次呼叫,我的请求失败。如果我调试,它会显示第一个请求处理得很好,但是当我尝试在客户端读取响应时,它会将新的调用发送到服务器,而该请求的身份验证失败 在下面的内联注释中,对服务器的2个调用将触发 string requestUri = "/Service/Contacts"; HttpWebRequest httpWebRequ

下面是我用来将数据发布到基于REST的服务器的代码片段。如果我开始在服务器上调试,我会看到两个独立的请求通过。我想知道的是为什么

由于第二次呼叫,我的请求失败。如果我调试,它会显示第一个请求处理得很好,但是当我尝试在客户端读取响应时,它会将新的调用发送到服务器,而该请求的身份验证失败

在下面的内联注释中,对服务器的2个调用将触发

        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,把那个头痛的问题抛在脑后。不,我以前从未用过。但我很高兴我换了。