2011-03-22 6 views
1

현재 WCF - WSIT 통합 작업을하고 있습니다. WS-ReliableMessaging WCF 및 ws2007HttpBinding 함께 사용하고 있습니다.WCF ReliableMessaging - SessionId를 사용하여 기존 OperationContext에 연결

신뢰할 수있는 세션이 올바르게 설정되어 있고 InstanceContextMode.PerSession을 사용하고 있으며 1 분 동안 사용하지 않으면 서비스 인스턴스가 종료됩니다.

내 관심사는 기존 OperationContext의 SessionId로 초기화 된 WCF 프록시를 어떻게 만들 수 있는지 잘 모르겠다는 것입니다. Visual Studio 생성 된 프록시가 SessionId를 생성자 등으로 받아들이지 않는 것 같습니다.

프록시 클라이언트가 죽어서 다시 만들어야하는 경우에도 SessionI를 사용하여 활성 서비스에 다시 연결할 수 있기를 원합니다. .

답변

1

WCF에서 안정적인 세션을 알고있는 것은 클라이언트와 서버가 모두 살아있을 때뿐입니다. 신뢰할 수있는 세션은 전송 수준의 신뢰성을 제공하는 WS-ReliableMassaging으로 구현 된 채널 수준입니다. 즉, 손실 된 메시지, 주문 배달, 메시지 다시 보내기 등을 처리 할 수 ​​있음을 의미합니다. = 안정성은 HTTP와 같은 신뢰할 수없는 전송 프로토콜을 극복하기위한 것입니다.

참가자가 "사망"하거나 오프라인으로 전환 될 수있는 시나리오의 경우 메시징 (MS 세계에서 MSMQ)을 사용해야합니다. Java 세계와 통합 할 때 JMS 기반의 다른 메시징 플랫폼이 필요할 것입니다. 당신이 내구성이 서비스를 이용할 수

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 몇 가지 검사를했고 당신은 옳은 것 같습니다. sessionId는 채널을 열 때 설정되며 아무리 깊게 파고 있어도 변경할 수 없습니다. 여기에서 해결하려고하는 문제는 오류 처리가 아니라 세션 관리와 관련이 있습니다. 실행중인 서비스에서 클라이언트를 분리하고 다시 연결할 수 있기를 바랍니다. –

+0

내 클라이언트가 연결이 끊긴 후 클라이언트가 다시 연결할 수없는 경우 잠시 동안 내 서비스 인스턴스가 살아 있고 머리가없는 닭처럼 작동하는 것처럼 보입니다. 클라이언트 측에서 쿠키를 파싱하고 다시 연결한다는 의미로 서비스 상태의 상태를 유지하기 위해 ASP 세션 또는 비슷한 것을 사용해야 할 것입니다. –

+0

나는 그것을 감당할 수 없다. 처리되지 않은 예외로 인해 서비스 파트가 종료되므로 서비스와 통신하려면 새 클라이언트 프록시를 열어야합니다. –

1

http://www.wcftutorial.net/How-to-Create-Durable-Service.aspx http://blogs.microsoft.co.il/blogs/egady/archive/2008/01/05/wcf-3-5-durable-services.aspx

+0

동의합니다. 서버 측에서 상태를 유지하면 세션 관리가 해결됩니다. 내가 언급 한 내구성있는 서비스 예제를 시험해 보겠습니다. 내 질문의 결론은 안정적인 메시징 및 세션 기반의 wsHttp 바인딩은 통신 세션에만 관련이 있다고 생각합니다. 워크 플로 상태와 연결되지 않은 클라이언트 시나리오를 즉시 처리 할 수는 없습니다. –