C# 一个连接多个请求Rest服务

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)

如何使用同一服务发出多个请求

我创建了一个静态httpWebRequest:

    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);