2016-03-01 70 views
2

如何使用相同的服務發出多個請求?一個連接多個請求Rest服務

我創建了一個靜態的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(); 
    } 

我得到錯誤信息包括流不能被寫入。連接意外關閉。我似乎無法在任何地方找到答案!

+0

處置使用蒸汽,嘗試沒有使用,只是手動關閉它們完成時。 – Jacobr365

+1

@ Jacobr365,不確定在這種情況下會起作用。請求流應該是隻前向/只寫流,就像響應流是隻前向/只讀流一樣。只適用於一種用途。 REST的整個概念是一個請求/響應對完全獨立和獨立。 – Kevin

+0

有沒有辦法對所有請求使用一個打開的連接?我也試過雅各布 - 它也不行 - 它創建了連接關閉的消息。 – markthewizard1234

回答

0

請勿創建靜態HttpWebRequest
請求不代表連接,但它使用ServicePointManager爲您管理底層TCP連接。
每次需要發送請求時,只需創建一個新的HttpWebRequest實例。

UPDATE:
如果您想爲您服務的客戶端,你應該使用HttpClient代替:

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