2011-08-13 11 views
6

WCF TCP 연결이 지속되지 않는 것처럼 보입니다. 첫 번째 ping 응답은 시간이 좀 걸리지 만 후속 프로세스는 더 적은 시간이 걸립니다. 잠시 후 다시 오래 걸립니다 - 다른 재 연결?영구 TCP 연결을 만들고 시뮬레이트하는 방법은 무엇입니까?

SERVER> Started on net.tcp://0.0.0.0:999

CLIENT> Connection created to net.tcp://localhost:999 //Not a real connection, ready to connect

CLIENT> Ping reply in 1s163ms //First connection

CLIENT> Ping reply in 22ms //Already connected

CLIENT> Ping reply in 26ms

CLIENT> Ping reply in 24ms

CLIENT> Ping reply in 325ms //Re-connected

CLIENT> Ping reply in 19ms

CLIENT> Ping reply in 767ms //Re-connected

사실이라면 tcp 연결이 끊어지기 전에 유휴 시간 값은 얼마입니까? 연결을 유지해야합니다.

업데이트 수정 된 코드 :

NetTcpBinding tcpBind = new NetTcpBinding(); 
tcpBind.ReliableSession.Enabled = true; 
tcpBind.ReliableSession.Ordered = true; 
tcpBind.ReliableSession.InactivityTimeout = TimeSpan.FromMinutes(10); 

ServiceHost svh = new ServiceHost(typeof(ServiceImplementation)); 
svh.AddServiceEndpoint(
    typeof(WCFSimple.Contract.IService), 
    //new NetTcpBinding(), 
    tcpBind, 
    String.Format("net.tcp://{0}:{1}", ip, port)); 
svh.Open(); 

가 지금은 또 다른 오류가 발생했습니다 :

The action http://tempuri.org/IService/Pong is not supported by this endpoint. Only WS-ReliableMessaging February 2005 messages are processed by this endpoint.

업데이트는 난 단지 서버 측 수정과 오류를 일으켰습니다. 그런 다음 클라이언트 쪽의 TCP를 신뢰할 수있는 메시징으로 수정했습니다.

+0

실제 테스트 : 3 초 간격으로 ping 응답은 ~ 100ms입니다. 간격이 60이면 응답은 ~ 500ms이고 1s520ms (재 연결 가능)가됩니다. –

+0

시간 초과를 활성화해야한다고 생각합니다 : reliableSession> enable = true; inactivityTimeout = 10s; –

답변

1

핑이 TCP 연결을 테스트하기위한 좋은 도구라고 생각하지 않습니다. Ping은 TCP 대신 기본 프로토콜로 ICMP를 사용하기 때문입니다.

WCF 클라이언트를 만들고 서비스에 연결 한 다음 일부 네트워크 스니핑 도구를 통해 TCP 연결을 확인하거나 간단히 확인하기 위해 netstat를 사용하는 것이 좋습니다.

+1

그것은 ICMP가 아니며, standart WCF 서비스입니다. 이름은 Ping입니다. 클라이언트가 시간을 보내면 서버는 응답을 반환합니다. –

1

일반적으로 WCF 연결은 일시적이지만 백그라운드에서 계속되는 연결 풀링이 있습니다.

전송으로 net.tcp를 사용하면 영구 (장기) 연결이 가능합니다. 게시 한 코드는이를 달성하는 한 가지 방법입니다.

자세한 내용은, 어떤 대안의 경우, 2006 년 10 월 또한 사용

에서 What You Need To Know About One-Way Calls, Callbacks, And Events, MSDN의 잡지 기사를 체크 아웃은 OperationContract 속성에서 사용할 수있는 IsInitiatingIsTerminating 속성입니다.

관련 문제