2016-06-28 3 views
0

C# WepApi에서 PetaPoco를 사용하고 있으며 많은 테이블에서 행을 삭제하는 저장 프로 시저를 실행해야합니다. 변수를 삭제할 행 수 (몇 개 또는 너무 많을 수 있음)가 있습니다. 가끔 PetaPoco가 예외 시간 초과를 throw합니다. PetaPoco를 사용하여 저장 프로 시저를 "호출"하고 프로 시저가 완료되기 전에 연결을 닫을 수 있습니까? 저장 프로 시저가 아무런 값도 반환하지 않으며 WebApi는 웹 사이트가 끝났을 때 알 필요가 없습니다 ...Petapoco는 대기없이 저장 프로 시저를 실행합니다.

+1

당신은 ADO.NET 연결을 닫을 수 없습니다 - 일 종료되며, 일을 불완전하게 두거나, 트랜잭션에 따라 롤백을 강제합니다. 비동기가 옵션 일 수 있습니다. 그렇지 않으면, ExecuteReader (ADO.NET에서)는 "CommandBehavior"를 통해 "완료되면 연결을 닫습니다." –

+0

이것은 내가 본 진짜 대답입니다. 할 수 있거나 할 수 없습니다. 감사합니다 – NunoRibeiro

답변

1

WebApi 요청에서 백그라운드 작업을 실행하고 반환해야하는 것은 무엇입니까? The are several options to run a background task 및 사용의 요구 타임 아웃 시간 변경하는 것을 잊지 마세요 : 사용

HttpContext.Server.ScriptTimeout = 50 * 60; // 50 minutes 

과 PetaPoco 명령 제한 시간 :

var db = new Database(connectionStringName); 
db.OneTimeCommandTimeout = 50; 
db.Execute(...); 
+0

저장 프로 시저를 실행하는 데 걸리는 시간을 예측할 수 없기 때문에 OneTimeCommandTimeout을 피하려고했으나 다른 옵션이없는 것처럼 보입니다. – NunoRibeiro

+0

ADO에서는 CommandTimeout을 0으로 설정하여 무한대로 설정할 수 있지만 PetaPoco는 옵션이 0보다 큰 경우에만 옵션을 설정합니다. 소스 코드를 변경할 수 있다면 어쩌면 그것이 해결책 일 것입니다. –