아래 메소드의 목표는 비동기식으로 데스크탑 애플리케이션에서 웹 컨트롤러로 http 포스트를 설정하고 시작하는 것입니다. 아래 작업을 설정하는 방법에 문제가 있어야한다고 생각합니다. 문제를 해결할 async/await 및 Task.Run과 같은 .NET 4.5에서 사용할 수있는 유용한 방법이 있다고 생각하지만 업그레이드는 현재 선택권. 아래에 설명 된 문제를 방지하기 위해 .NET 4.0에서 이것을 처리/작성하는 더 좋은 방법이 있습니까? 여러 일괄 처리 - - 실패 전에 방법은 때로는 2 ~ 3 번, 때로는 여러 작동, 때로는 심지어 게시물의 수백 작동WebException을 일으키는 PostAsync() 태스크 내의 WebException
public void PostWithoutResponse(object objectToPost, string url) {
Task.Factory.StartNew(() =>
{
using (var handler = new HttpClientHandler()) {
handler.PreAuthenticate = true;
handler.Credentials = _credentialPool.GetNetworkCredentials(new Uri(url));
using (var client = new HttpClient(handler)) {
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var stringContent = new StringContent(JsonConvert.SerializeObject(objectToPost), Encoding.UTF8, "application/json")) {
// We weren't able to get this post to work without waiting for result
var result = client.PostAsync(url, stringContent).Result;
}
}
}
});
}
. 프로그램은 계속되지만 더 이상 게시물이 데이터베이스에 반영되지 않으며 결국 예외가 발생합니다. 데이터베이스 업데이트를 중지하지만,
_innerException {"The request was canceled"} System.Exception {System.Net.WebException}
흥미롭게 :
System.AggregateException was unhandled
Message: An unhandled exception of type 'System.AggregateException' occurred in mscorlib.dll
Additional information: One or more errors occurred.
하나 개의 내부를 제외 : (. 아마 시간 초과로 인해)
우리는이 발생되는 예외 관찰 할 수 있었다 2 ~ 3 일 후에 프로그램 (자동 배치 처리 워크 플로)이 계속 실행되며 새 배치를 얻으려면이 방법에 도달 할 때까지 예외가 발생하지 않는 것 같습니다. 아마도 관련이 있을까요?
public string GetPostResult(object objectToPost, string url) {
string jsonResult = null;
using (var handler = new HttpClientHandler()) {
handler.PreAuthenticate = true;
handler.Credentials = _credentialPool.GetNetworkCredentials(new Uri(url));
using (var client = new HttpClient(handler)) {
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var serializedContent = JsonConvert.SerializeObject(objectToPost);
using (var stringContent = new StringContent(serializedContent, Encoding.UTF8, "application/json")) {
var taskResult = client.PostAsync(url, stringContent).Result;
jsonResult = taskResult.Content.ReadAsStringAsync().Result;
}
}
}
return jsonResult;
}
또한 나는 우리가 여러 가지 준비에 시도/캐치를 넣어 시도했습니다 언급해야하지만 밖으로 거품과 실행을 중단 할 때까지 어디 그 예외를 캡처 할 수없는 것.
는 (처음에 위의 코드를 우리의 개발 컴퓨터에서 작업 및 생산 기계에 실패,하지만이 된 임의의 행운이 우리의 역할에 대한 오해와 결합 된 것으로 판명 된 듯.)
서버가 너무 빨리 작동하고 속도가 제한되는 것처럼 들립니다. –
생각을 감사하게 생각하지만 왜 우리 시스템에서 같은 속도로 제대로 작동하는지 설명하지는 못합니다. – RJB
@RJB 컴퓨터에 IIS를 설정해도 속도 제한이 활성화되어 있지 않으므로? –