2011-01-28 2 views
1

편집 : 디버그 모드에서 클라이언트 솔루션을 사용할 때 모든 것이 의도 한대로 작동합니다. 이 서비스가 포함 된 솔루션은 디버그 모드에서 제대로 작동합니다. 내가 서버에 사용자가 업로드 한 .zip 파일을 저장하는 파일 업 로더에 일하고 있어요다중 스레드 클라이언트 메서드를 실행하기 전에 WCF 서비스가 완료 될 때까지 대기


후 비동기 거기에서 서로 다른 위치의 무리에 복사합니다 (웹 서비스 사용), 그리고, 그것을 압축을 풀고 업로드 된 .zip 파일과 압축 해제 된 파일을 삭제합니다.

그래서 :

1) 업로드 파일

2))을 QueueUserWorkItem (methodName로를 사용하여 압축을 풀고는 "감사합니다"페이지

3) methodName로 (로 사용자를 리디렉션)은 압축을 푼 폴더를 다른 위치로 복사하는 몇 가지 WCF 웹 서비스 호출을합니다. 서비스 호출이 완료되면

string copyToPaths = UploaderService.StartFolderUpload(_fileCategoryName, topDir); 
UploaderService.CompleteFolderUpload(copyToPaths); 

4) 오래된 파일을 삭제하고 파일을 (더 이상

그래서 내 문제는 WCF 서비스를 호출하는 방법은 대기하지 않는다는 것입니다 여기문제) 필요하지 않습니다 완료되기 전의 서비스 호출을 완료하고 파일을 삭제합니다. 업로드 된 파일을 삭제하면 웹 서비스는 해당 파일을 다른 위치로 복사 할 수 없습니다.

QueueUserWorkItem과 함께 호출 된 메서드를 웹 서비스 호출이 끝날 때까지 기다렸다가 실행을 계속할 수 있습니까?

+1

문제와 관련이있는 질문 제목을 업데이트해야합니다. 귀하의 태그를 사용하여 어떤 기술 등을 사용하여 – James

+0

귀하의 게시물은 파일 삭제가'QueueUserWorkItem (MethodName)'아래 행에서 이루어 졌다고 제안합니다. 'QueueUserWorkItem'이 즉시 반환하기 때문에 작동하지 않습니다. 그들은 MethodName의 끝에 있어야합니다. –

+0

아니요 - 삭제는 QueueUserWorkItem (MethodName) 호출 이후가 아니라 MethodName() 메서드 끝에서 수행됩니다. – Buchannon

답변

1

제가 아는 한,이 동작은 클라이언트 측과 아무 관련이 없습니다. 그것은 서비스 메소드의 OperationContract 속성에 의해 제어됩니다.

[OperationContract(IsOneWay = true)] 
void CompleteFolderUpload(string copyToPaths); 

두 번째 서비스 방법은 어떻게 생겼습니까? 그렇다면 클라이언트가이 메서드가 완료 될 때까지 기다리도록하려면 IsOneWay를 false로 설정하거나 제거해야합니다. IsOneWay = true는 클라이언트가 서버로부터 응답을 기대해서는 안되므로 메서드가 완료되기 전에 거의 항상 반환된다는 것을 의미합니다.

+0

나는 이것을 모든 서비스 방법에 추가하려고 시도했지만, 여전히 동일한 문제가 있습니다. – Buchannon

+0

정확히 무엇을 추가 했습니까? "IsOneWay"매개 변수가 누락 된 경우 이는 "IsOneWay = false"와 같습니다. 이는 원하는 것입니다. 서비스 작업이 올바르게 표시되면 서비스 메서드 자체가 비동기적일 수 있습니다. 예를 들어 작업 스레드에서 실행되도록 작업을 대기시킨 다음 즉시 반환 할 수 있습니다. 서비스 코드를 관리합니까? –

+0

예. 서비스와 클라이언트 코드를 모두 제어합니다. 필자는 서비스가 상속하는 인터페이스의 각 메소드에 [OperationContract (IsOneWay = false)]를 추가했습니다. – Buchannon

0

WCF 서비스를 Duplex service으로 설정하는 것이 좋습니다. 이렇게하면 클라이언트에서 콜백을 지정하여 서비스가 완료된 시점을 알 수 있습니다. 예 : 고객에게 다시 데이터를 전달합니다. 오류 정보 등

관련 문제