2011-08-09 72 views
1

我试图让一个HttpWebRequest通过POST发送数据到一个REST Web服务,然后跟进一个额外的HttpWebRequest来处理后下载响应。WebRequest GetResponse没有响应,操作超时

的POST正在发送二进制数据到Web服务,如下所示:

HttpWebRequest uploadRequest = (HttpWebRequest)WebRequest.Create(baseAddress + uploadURIRequest); 
uploadRequest.Timeout = Timeout.Infinite; 
uploadRequest.ReadWriteTimeout = Timeout.Infinite; 
uploadRequest.Method = "POST"; 
uploadRequest.ContentLength = fileInfo.Length; 
uploadRequest.ContentType = "application/octet-stream"; 

using (Stream writeStream = uploadRequest.GetRequestStream()) 
{ 
    using (FileStream readStream = new FileStream(fileStreamFileName, FileMode.Open, FileAccess.Read)) 
    { 
     byte[] data= new byte[readStream.Length]; 
     int bytesRead = readStream.Read(data, 0, (int)readStream.Length); 
     writeStream.Write(data, 0, bytesRead); 

     readStream.Close(); 
    } 
    writeStream.Close(); 
} 

那么接下来的请求时告诉Web服务来处理服务器上的数据并返回状态响应。

HttpWebRequest processRequest = (HttpWebRequest)WebRequest.Create(baseAddress + processURIRequest); 
processRequest.Timeout = 10000; 
processRequest.ReadWriteTimeout = 10000; 
processRequest.ContentType = "GET"; 

HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse(); 

using (Stream processRequestResponseStream = processRequestResponse.GetResponseStream()) 
{ 
    //Do stuff... 

} 

当我更改内容类型时,它适用于XML数据。但是,当我如上所示使用二进制数据保存它时,即使将超时时间增加到超过10秒,操作总是会超时。它正在做的处理不应该花这么长时间才能返回。

当我调试,它总是挂在符合的GetResponse:

HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse(); 
+0

您的进程请求看起来没有正确设置。您将ContentType设置为获取并且没有内容长度或方法的设置 – dbugger

+0

您的代码中是否存在Off-by-one错误?您正在设置ContentLength = FileStream.Length,但只能上传FileStream.Length-1个字节。 – feroze

+0

对不起,这只是一个错误,试图简化我在这里发布的代码。 – jkh

回答

1

添加

HttpWebResponse uploadRequestResponse = (HttpWebResponse)uploadRequest.GetResponse(); 

写入流后解决了这个问题。

+0

写完之后? – JNF

相关问题