2011-07-29 3 views
0

수천 개의 항목을 내 wcf 서비스로 보내는 클라이언트 응용 프로그램이 있습니다. 데이터가 대량으로 전송되므로 작업을 취소해도 진행률 표시 줄로 모든 항목이 삭제됩니다. 내가 원하는 동작은 서비스에서 삭제 작업을 취소하고 삭제되지 않은 항목을 검색 할 수있게하는 것입니다. 고맙습니다.WCF 서비스에 통지하여 현재 실행중인 작업을 취소하고 나머지 데이터를 반환합니다.

+1

아직 서비스에 대해 생각하지 않는다 - 당신이 어떻게 데이터베이스 또는 어떤 영구 저장소에 이런 짓을 했을까? 삭제를 취소 할 수있는 방법이 있습니까? –

+0

항목이 데이터베이스에서 하나씩 제거됩니다. 작업을 중단하고 삭제되지 않은 항목을 다시 반환 할 항목이 필요합니다. 나는 당신의 질문에 올바르게 대답하기를 바랍니다. 감사. –

+0

소리가 필요한 것보다 훨씬 복잡합니다. –

답변

0

어떤 InstanceContextMode를 사용하고 있습니까?

원하는 작업은 PerCall이 아닌 InstanceContextMode Singleton 또는 Session에서 작동합니다.

대량 작업으로 삭제를 시작하는 방법이 OneWay라고 가정합니다.

서비스에 bool 필드 (처음에는 false)를 생성하십시오. 레코드를 하나씩 삭제하는 루프는 플래그를 확인하고 플래그가 true이면 중지됩니다.

서비스에서 필드를 true로 설정하는 다른 메서드를 만듭니다. '취소 삭제'버튼을 누르면 웹 사이트에서 새 방법으로 전화하십시오. 레코드 삭제를위한 루핑은 중단됩니다.

삭제되지 않은 레코드를 반환하는 것은 약간 까다 롭습니다. 삭제할 레코드 목록도 서비스 클래스의 memebr이어야하며 삭제를 중지하는 메소드는 목록에 대한 액세스 권한도 갖습니다. db shoulkd에서 삭제하는 방법은 나머지 항목을 추적 할 수 있도록 목록에서 레코드를 하나씩 제거합니다.

두 번째 방법에서는 목록을 즉시 반환 할 수 있지만 정확한 결과를 보장하지는 않습니다. 내가 할 수있는 것은 돌아 오기 전에 200 밀리 초의 기다림이다. 그렇게하면 목록에서 제거 된 항목이 실제로 db에서 삭제된다는 것을 알 수 있습니다. 이 분명하다

희망 ...

+0

예, InstanceContextMode가 PerSession이고 삭제 작업이 OneWay입니다. 나는 당신의 요지를 얻고, 나는 무엇이 일어날지를보고 시도 할 것입니다. 나머지 삭제되지 않은 항목은 어쩌면 다시 가져올 필요가 없습니다. 클라이언트 측에서 항목을 새로 고치려면 다른 작업을 수행하려고합니다. 감사. –