C# 一个连接多个请求Rest服务
如何使用同一服务发出多个请求 我创建了一个静态httpWebRequest:C# 一个连接多个请求Rest服务,c#,web-services,httpwebrequest,connection-pooling,C#,Web Services,Httpwebrequest,Connection Pooling,如何使用同一服务发出多个请求 我创建了一个静态httpWebRequest: private static HttpWebRequest request; //private static StreamReader streamReader; //private StreamWriter streamWriter; public CentralRestService2(LogFile log) { if (request == null)
private static HttpWebRequest request;
//private static StreamReader streamReader;
//private StreamWriter streamWriter;
public CentralRestService2(LogFile log)
{
if (request == null)
{
request = (HttpWebRequest)WebRequest.Create("service address");
request.Method = "POST";
request.Accept = "*/*";
request.ContentType = "application/json";
request.Headers["Authorization"] = "username and password";
request.KeepAlive = true;
}
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string body = new JavaScriptSerializer().Serialize(emailRequest);
streamWriter.Write(body);
}
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
response.Close();
}
我收到错误消息,包括流无法写入。连接意外关闭。我似乎到处都找不到答案 不要创建静态的
HttpWebRequest
请求不代表连接,但它使用的是为您管理底层TCP连接的连接。
每次需要发送请求时,只需创建一个新的HttpWebRequest实例 更新:
如果要为服务创建客户端,则应使用:
使用可以处理蒸汽,不用使用就可以尝试,完成后手动关闭。@Jacobr365,不确定在这种情况下是否有效。请求流应该是只向前/只写流,就像响应流是只向前/只读流一样。只适合一次使用。REST的整个概念是一个请求/响应对是完全独立的,并且是独立的。有没有办法对所有请求使用一个开放连接?我还尝试了Jacob——它也不起作用——它创建了连接关闭消息。HttpClient似乎无法处理没有主体但设置了内容类型的GET请求。HttpWebRequest可以
HttpClient
在引擎盖下使用HttpWebRequest
-应产生相同的结果
// add reference to System.Net.Http and System.Net.Http.Formatting
using System.Net.Http;
// with a handler you can configure the client and its behavior
var handler = new HttpClientHandler();
var httpClient = new HttpClient(handler);
httpClient.BaseAddress = new Uri("service address");
httpClient.DefaultRequestHeaders.Add("Authorization", "username and password");
var response = await httpClient.PostAsJsonAsync(httpClient.BaseAddress, emailRequest);