콜백/이중 통신 채널을 닫는 데 문제가 있거나 질문이 있습니다. 나는 다음을 검색 할 수WCF 콜백 인터페이스 - 누가 채널을 닫습니다.
OperationContext.Current.GetCallbackChannel<IMyInterfaceCallback>();
을 사용하여 서버 측에
DuplexChannelFactory<IMyInterface> dcf = new DuplexChannelFactory<IMyInterface>(implOfIMyInterfaceCallback, customBinding, ea);
IMyInterface myInterface = dcf.CreateChannel();
: 내가 통해 내 WCF 인터페이스를 만들 클라이언트 측에
[ServiceContract(CallbackContract = typeof(IMyInterfaceCallback))]
public interface IMyInterface
{
[OperationContract]
void StartWork();
}
public interface IMyInterfaceCallback
{
[OperationContract(IsOneWay = true)]
void WorkFeedback();
}
: 여기 내 원형 WCF 인터페이스입니다 콜백 포인터는 클라이언트와 통신하는 데 사용될 수 있습니다.
내 질문은 지금 :
- 누구 통신 채널을 종료해야합니까? 클라이언트 또는 서버
- 어떤 통신 객체를 닫아야합니까? 원래 인터페이스 (IMyInterface) 또는 콜백 인터페이스 (IMyInterfaceCallback) 또는 둘 다.
서버가 더 이상 콜백을하지 않는다는 것을 알고있을 때 서버 측에서 콜백 인터페이스를 닫으려고했습니다. 그러나 콜백 인터페이스에서 ICommunicationObject :: Close를 사용하면 차단 작업이 1 분이 걸립니다.
내 의견으로는 클라이언트 쪽에서 마감하는 것이 올바른 방법이 아닙니다. 예상보다 많은 콜백이 있는지 클라이언트가 알지 못하기 때문입니다.
도움 주셔서 감사합니다. 프랭크
이PS : 이것은 아주 기본적인 질문을 것 같다,하지만 ... 구글을 통해 또는 유래의 DuplexChannel은 후드 아래에 TCP 연결을 사용
정보 주셔서 감사합니다. 이제 클라이언트 측의 채널을 닫고 모든 것이 정상입니다. 하지만 닫히기 전에 상태를 확인하고 있습니다. Faulted 인 경우 Abort()를 직접 호출합니다. 하지만 닫는 코드도 잘 작동해야합니다. – FrankE