【发布时间】:2015-07-09 22:11:03
【问题描述】:
我可以向 Web 服务发出一些请求并且它们工作正常 - 但是这个返回错误消息。
- “出现一个或多个错误”
- “底层连接已关闭:接收时出现意外错误。”
- “无法从传输连接读取数据:现有的 连接被远程主机强行关闭。”
我已经调试了 Web 服务,它返回了正确的 JSON。
下面是我用来调用网络服务的代码。我已经尝试过 Async / Await 但它没有任何区别。
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 Post 的代码
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);
}
然后这会在前端填充一个 DataTable。
对 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.MaxResponseContentBufferSize。我相信 web.config 中也可能有一个设置,但我目前找不到任何相关信息。这里还有另一种可能的解决方案...stackoverflow.com/questions/18720435/… -
发布异常 ToString。此外,挂接 Fiddler 作为代理,并确保应用正在接收您期望的内容。
-
您的代码中的
HttpClient是什么?该对象定义未显示。 -
@DavidG HttpClient 只是 HttpClient 对象。例如 HttpClient httpClient = new HttpClient();
-
@JamesReeves 这很令人困惑,因为
httpClient不等于HttpClient(注意大写)
标签: c# asp.net-mvc-4 dotnet-httpclient