我可以向Web服務發出一些請求,並且它們工作正常 - 但是,這個返回錯誤消息。HttpClient在某些請求上失敗
- 「一個或多個錯誤發生」
- 「的基礎連接已關閉:接收時發生意外的錯誤。」 「
- 」無法從傳輸連接讀取數據:現有的 連接被遠程主機強制關閉。「
我調試了Web服務,它返回正確的JSON。
下面是我用來調用Web服務的代碼。我嘗試過異步/等待,但沒有什麼區別。
public static string PostURL(string uri, List<KeyValuePair<string, string>> pairs)
{
try
{
var content = new FormUrlEncodedContent(pairs);
var httpClient = new HttpClient();
var response = httpClient.PostAsync(uri, content).Result;
if (response.IsSuccessStatusCode)
return response.Content.ReadAsStringAsync().Result.ToString();
else
return "Failed";
}
catch(AggregateException e)
{
return e.Message;
}
}
這是代碼調用HttpClient的郵政
public ActionResult JobDetails()
{
var response = WebServicePost.PostURL(WebServicePost.Uri + "JobService.svc/GetJob/", new List<KeyValuePair<String, String>>
{
new KeyValuePair<string, string>("JobID", "46"),
new KeyValuePair<string, string>("CompanyCode", System.Web.HttpContext.Current.Request.Cookies["CompanyCode"].Value)
});
List<Job> list = (List<Job>)JsonConvert.DeserializeObject(response.ToString(), typeof(List<Job>));
return View(list);
}
位這然後填充在前端的一個數據表。
對Web服務的調用如下。
public List<Job> GetJob(Stream streamData)
{
dynamic jObject = streamReader.ConvertToDynamicJsonObject(streamData);
int jobID = int.Parse(jObject["JobID"]);
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
try
{
var query = session.QueryOver<Job>().Where(x => x.JobID == jobID).List();
return query.ToList();
}
catch (Exception e)
{
Logger.log("Exception at GetJob", e.Message);
return null;
}
}
}
}
有誰知道爲什麼會發生這種情況?
HttpClient.PostAsync(uri, content).Result;
或:
可能與請求/響應的大小有關。檢查你的'HttpClient.MaxResponseContentBufferSize'。我相信在web.config中也可能有一個設置,但我目前無法找到任何信息。這裏還有一個替代可能的解決方案... http://stackoverflow.com/questions/18720435/httpclient-buffer-size-limit-exceeded –
發佈異常ToString。此外,作爲代理鉤入Fiddler並確保應用程序正在接收您期望的內容。 – usr
代碼中的「HttpClient」是什麼?該對象定義未顯示。 – DavidG