문제

또한보십시오 WCF 서버는 WCF 클라이언트에게 변경 사항에 대해 어떻게 알리나요?(더 나은 솔루션보다 간단한 폴링, 예를 들어댓글 또는 긴 폴링)

클라이언트 방화벽을 통해 WCF에 푸시 기술을 사용해야 합니다.이것은 일반적인 문제임에 틀림없으며 이론상으로는 작동한다는 사실을 알고 있지만(아래 링크 참조) 작동시키지 못했고 이를 보여주는 코드 샘플을 찾을 수 없었습니다.

요구사항:

  • WCF
  • 클라이언트는 TCP 포트 80(netTcpBinding)을 통해 서버에 연결합니다.
  • 서버는 불규칙한 간격(1분~몇 시간)으로 정보를 푸시백합니다.
  • 사용자는 방화벽을 구성할 필요가 없으며, 서버 푸시는 모든 인바운드 포트가 닫힌 방화벽을 통과해야 합니다.이를 위해서는 동일한 연결의 TCP 이중화가 필요하며, 클라이언트 방화벽에서 포트를 열어야 하므로 이중 바인딩이 작동하지 않습니다.
  • 클라이언트는 일정한 간격(아마 15분마다)으로 하트비트를 서버에 보내므로 서버는 클라이언트가 아직 살아 있음을 알 수 있습니다.
  • 서버는 WAS가 포함된 IIS7입니다.

솔루션은 이중 netTcpBinding인 것 같습니다.이 정보를 바탕으로:

방화벽과 NAT를 통한 WCF

IIS에서 연결을 열어두기

하지만 아직 작동하는 코드 샘플을 찾지 못했습니다.저는 Microsoft의 WCF 샘플에서 "Duplex"와 "TcpActivation" 샘플을 결합해 보았습니다.누군가 작동하는 예제 코드를 알려 주거나 작은 샘플 앱을 만들 수 있습니까?정말 감사합니다!

도움이 되었습니까?

해결책

몇 가지 해결책을 찾았습니다.

제로씨 아이스 상용 옵션이 포함된 GPL.신속하게 테스트했습니다..NET Remoting보다 더 강력해 보이고 매우 적극적으로 개발되고 있습니다.

RemObject 상업적이고 활발한 개발은 모든 것을 지원하지만 GenuineChannels가 사용하는 고급 기능을 모두 갖춘 것 같지는 않습니다.

정품채널.많은 멋진 추가 기능이 포함된 원격 기능을 사용합니다. 가장 중요한 점은 클라이언트 방화벽을 열 필요 없이 NAT를 통해 작동한다는 점입니다.불행히도 매우 죽은 것 같습니다.

또 다른 해결책은 이 문서에 따라 IIS에서 스트리밍을 사용하는 것입니다. IIS에서 연결을 열어두기

클라이언트는 포트 80에서 서버에 대한 첫 번째 연결(IIS6의 경우 http, IIS7의 경우 tcp)을 설정한 다음 연결이 끝나지 않는 스트리밍 응답으로 열린 상태로 유지됩니다.

나는 이것을 실험할 시간이 없었고 방화벽 문제를 구체적으로 해결한다고 말하는 샘플을 찾지 못했지만 다음은 아마도 작동할 수 있는 훌륭한 샘플입니다. 스트리밍 XML.

다른 팁

다음을 살펴보셨나요? http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

이미 시도한 사례를 제공해 주실 수 있나요?방화벽 등의 세부정보, 오류 메시지가 포함되어 있나요?

클라이언트와 서버 모두 직접 주소를 지정할 수 있고 방화벽이 문제가 되지 않는 경우 클라이언트가 지원되는 계약을 제공하는 URL을 등록하도록 허용하는 것을 고려해 보셨나요?그런 다음 서버는 장기간 실행(대부분 유휴 연결)을 설정할 필요 없이 필요할 때마다 이 서비스를 호출할 수 있으며 하트 비트가 필요하지 않고 세션\연결 전반에 걸쳐 탄력성을 가질 수 있습니다.

대부분의 방화벽 설정에서 TCP 연결은 리소스를 절약하기 위해 유휴 상태인 경우 방화벽에 의해 끊어집니다.유휴 시간 제한은 아마도 사용자가 제어할 수 있는 것이 아닐 것입니다.일부는 유휴 상태이고 리소스 제한에 도달하면 이를 해체합니다.

대부분의 기업 환경에서는 어떠한 시스템도 아웃바운드 TCP 연결을 만드는 것을 허용하지 않습니다.

또한 이 메커니즘을 사용하면 크기 조정 문제가 발생한다는 의미입니다.더 안정적인 해결책은 정보를 대기열에 추가하고 고객이 정기적으로 정보를 폴링하도록 하는 것입니다.가능한 경우 캐싱을 활용하여 후속 클라이언트 폴링이 고객 프록시 캐시를 사용하는 경우 고객 프록시 캐시에서 캐시된 데이터를 가져옵니다.

적시에 데이터를 1초 미만의 속도로 푸시해야 하는 경우(예:금융 서비스) 그런 다음 클라이언트 측 NServiceBus 배포자와 같은 일부 메시징 인프라를 고려하지만 고객 설치가 필요합니다...

그럼 Toredo를 사용해 보셨나요?거기에 나타날 것이라는 내용을 읽은 후에는 사용자가 설정하기에는 너무 복잡할 수 있습니다.

나는 당신이 말하는 시나리오를 시도하지 않았으므로 큰 도움이 될 수 없습니다. 죄송합니다.우회해야 할 것이 클라이언트 방화벽뿐이라면 확인해 보세요. 이 게시물.

행운을 빌어요.

이것을 시도해 보셨나요?DuplexHttpBinding

사용자 지정 WCF 바인딩으로 캡슐화된 스마트 폴링 기술을 사용합니다.따라서 즉시 작동해야 합니다.

방화벽이 활성화된 클라이언트에서 이중 웹 서비스에 액세스하기 위해 클라이언트에서 다음 변경을 수행할 수 있습니다.

  • 방화벽 -> 고급 -> 설정(네트워크 연결 설정) -> 웹 서버(Http)에서 WebHttp 옵션을 체크합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top