이 질문에 대한 주변이지만 반환하는 데 10 분 이상 걸리는 메서드에서 비동기 콜백을 고려한 다음 프로세스를 별도의 스레드에서 실행하고 있습니까? 어쨌든 서비스가 여러 발신자를 허용해야하지만 (서비스 요청은 수천 개의 동시 요청을 처리해야 함) 10 분 동 기적으로 서비스 요청을 대기하는 것은 좋지 않으며 문제를 해결할 수도 있습니다.
WCF를 호출 할 때 동 기적으로 또는 비동기 적으로 호출 할 수 있습니다. 동기 호출은 응답이 동일한 작업에서 호출자에게 다시 전송되기를 기다립니다. 호출자에서는 "myresult = svc.DoSomething()"과 같이 보입니다. 비동기 호출을 사용하면 호출자는 서비스가 완료 될 때 호출 할 수 있지만 응답을 기다리지는 않습니다. 호출자는 응답을 기다리는 동안 차단하지 않으며 비즈니스에 대해 간다.
DoSomethingCompletedEventArgs 걸릴 것입니다 귀하의 콜백 : 무효 myCallback (개체를 보낸 사람, DoSomethingCompletedEventArgs 전자)를 { VAR myResult = e.Result; // 그 전에 사용했던 결과를 사용하십시오. }
이벤트 핸들러처럼 콜백 함수를 등록하십시오. svc.DoSomethingCompleted + = myCallback; 다음 svc.DoSomethingAsync(). 해당 문에는 반환 값이 없습니다. 이 서비스는 myCallBack을 완료하고 결과를 전달할 때 myCallBack을 실행합니다. Silverlight의 모든 WCF 호출은 비동기 적이어야하지만 다른 클라이언트의 경우이 제한이 없습니다.
다음은 약간 다른 방법을 자세히 설명하는 코드 프로젝트입니다. http://www.codeproject.com/Articles/91528/How-to-Call-WCF-Services-Synchronously-and-Asynchr
이것은 클라이언트가 10 분 이상의 프로세스 동안 블로킹하지 않도록하지만 실제로 서비스 자체의 작동 방식을 변경하지는 않습니다.
이제 제가 언급 한 두 번째 부분은 서비스 내부와 별도의 스레드에서 10 분 이상의 프로세스를 실행하는 것입니다. 서비스 메소드 자체는 매우 얇고 다른 라이브러리에서 기능을 호출해야합니다. 오랜 시간이 걸리는 함수는 자신의 스레드에서 이상적으로 호출되어야합니다 (완료시 콜백을 서비스 측에 등록하는 배경 작업자를 말합니다). 그리고 일종의 지속적인 시스템을 통해 진행 상황을 추적하고 클라이언트에게 돌아갈 필요가있는 결과. 그것이 나 였다면 나는 db에 프로세스에 대한 요청을 등록한 다음 db를 완료하여 업데이트 할 것입니다. 클라이언트는 주기적으로 간단한 폴링을 시작하여 프로세스가 완료되었는지 확인하고 결과를 얻습니다. 프로세스가 자동으로 완료 될 때 알림을 받도록 양면 바인딩을 설정할 수도 있지만 양면 바인딩을 수행 한 지 몇 년이 지났음을 알았 기 때문에 정확하게 작동하는 것을 기억하지 못합니다.
이 주제는 너무 커서 여기 깊이 들어가기에는 너무 큽니다. BackgroundWorker로 멀티 스레드 작업을 연구 할 것을 제안합니다.
나는 당신이 동시성을 찾고 있다고 가정한다. WCF 서비스 인스턴스 및 서비스 제한이 WCF 동시성의 주된 기여이기 때문에 WCF 서비스 인스턴스 및 서비스 제한에 대해 자세히 읽어 볼 것을 권장합니다. –