2012-05-07 3 views
2

현재 WCF 서비스를 위해 노력 중이며 작은 문제가 있습니다. 이 서비스는 Polling Duplex 서비스입니다. 나는 서버로 전송 된 메시지를 통해 데이터 전송을 시작한다. 그런 다음 서버는 콜백 채널을 통해 대용량의 데이터 패킷을 클라이언트에 전송합니다.WCF 서비스 지우기 버퍼

중지하려면 중단하라는 메시지를 보내십시오. 그런 다음 콜백 채널을 통해 클라이언트에게 알려주는 메시지를 보냅니다.

데이터의 패킷 묶음이 콜백 채널을 통해 클라이언트로 전송되도록 버퍼링되는 문제가 있습니다. 이로 인해 모든 데이터가 처음부터 끝날 때까지 기다려야하기 때문에 승인을 기다리는 데 오랜 시간이 걸립니다.

서버 측 콜백 채널 버퍼를 지울 수있는 방법이 있습니까? 데이터 손실에 대해 걱정할 필요가 없습니다. 그냥 버리고 즉시 확인 메시지를 보내야합니다.

+0

아직 좋은 해결책이 제시되지 않았습니다. 모든 데이터가 버퍼링되는 위치를 알지 못합니다. 서버가 데이터를 보내고있다가 멈추라 고 말하면 서버 측에서 일어난다는 것을 알지만 클라이언트는 그 후 몇 초 동안 데이터를 계속 얻는다. 내가 보내는 것을 늦추면 나는 문제가 없다. 여기서 문제는 연결 속도가 다양하다는 것입니다. 연결을 기반으로 조절해야 할 필요가 있습니다. 도움이 될 버퍼가 비어 있다고 말할 수 있다고해도, 그때 내가 보낸 데이터를 저장할 수 있습니다. – thecaptain0220

답변

1
나는이 올바른 방향으로 당신을 이끌 수 있는지 확실하지 않습니다

여부는 ... 내가 내 구독() 메소드를 보면 유사한 서비스를,이 액세스 할 수 있습니다

var context = OperationContext.Current; 
var sessionId = context.SessionId; 
var currentClient = context.GetCallbackChannel<IClient>(); 
context.OutgoingMessageHeaders.Clear(); 
context.OutgoingMessageProperties.Clear(); 

IClient 개체를 사용하는 방법과 IClient 인스턴스가있는 컨텍스트에 액세스 (컨텍스트를 확인) 할 수 있다면 다음 두 문을 실행하면 원하는 작업을 수행 할 수 있습니까?

context.OutgoingMessageHeaders.Clear(); 
context.OutgoingMessageProperties.Clear(); 

내 생각에서 잠깐. 이 문제가 해결 될지 여부를 아는 것이 가장 좋을 것입니다. 2 개의 속성을 포함하는 SubscriptionObject의 일부로 OperationContext를 캐시 할 수 있습니다. 첫 번째는 OperationContext이고 두 번째는 IClient 객체입니다.

+0

올바른 방향 일 수 있습니다. 클라이언트와 OperationContext를 유지하고 있지만 OutgoingMessageHeaders를 지우려면 지울 때까지 카운트가 0이라고합니다. 나는 그걸로 좀 더 돌아 다니고, 무엇이든 찾아 내면 알려주지. – thecaptain0220