Xai*_*oft 5 c# asp.net web-services httpwebrequest
我在这里使用Jon Skeet的ReadFully方法:
public static byte[] ReadFully(Stream stream)
{
var buffer = new byte[32768];
using (var ms = new MemoryStream())
{
while (true)
{
int read = stream.Read(buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer, 0, read);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它在该行引发异常:
int read = stream.Read(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)
错误消息是The request was aborted: The connection was closed unexpectedly.
我正在向web服务发送xml请求.我的send方法如下所示:
private static string SendRequest(XElement request, string url)
{
var req = (HttpWebRequest)WebRequest.Create(url);
req.ContentType = "application/soap+xml;";
req.Method = "POST";
req.KeepAlive = false;
req.Timeout = System.Threading.Timeout.Infinite;
req.ReadWriteTimeout = System.Threading.Timeout.Infinite;
req.ProtocolVersion = HttpVersion.Version10;
req.AllowWriteStreamBuffering = false;
using (var stm = req.GetRequestStream())
{
using (var stmw = new StreamWriter(stm))
{
stmw.Write(request.ToString());
}
}
Stream responseStream;
using (var webResponse = req.GetResponse())
{
responseStream = webResponse.GetResponseStream();
}
// Do whatever you need with the response
var myData = ReadFully(responseStream);
string responseString = Encoding.ASCII.GetString(myData);
return responseString;
}
Run Code Online (Sandbox Code Playgroud)
我试过没有和没有设置以下变量,它给了我相同的消息:
req.KeepAlive = false;
req.Timeout = System.Threading.Timeout.Infinite;
req.ReadWriteTimeout = System.Threading.Timeout.Infinite;
req.ProtocolVersion = HttpVersion.Version10;
req.AllowWriteStreamBuffering = false;
Run Code Online (Sandbox Code Playgroud)
Bli*_*ndy 10
问题出在你的代码的这一部分:
// wrong way to do it!
Stream responseStream;
using (var webResponse = req.GetResponse())
{
responseStream = webResponse.GetResponseStream();
}
// Do whatever you need with the response
var myData = ReadFully(responseStream);
Run Code Online (Sandbox Code Playgroud)
在从流中读取之前,您将处置响应对象.尝试这样的事情:
byte[] myData;
using (var webResponse = req.GetResponse())
{
var responseStream = webResponse.GetResponseStream();
myData = ReadFully(responseStream); // done with the stream now, dispose of it
}
// Do whatever you need with the response
string responseString = Encoding.ASCII.GetString(myData);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18552 次 |
| 最近记录: |