2010-01-27 4 views
0

하나만 사용하도록 WCF를 구성하는 방법 두 개의 사용 가능한 끝점 중 하나를 사용 하시겠습니까?두 끝점 중 하나를 사용하도록 WCF 구성

두 개의 TCP 포트가 필요합니다 (따라서 netTcpBinding 사용). 서비스 호스트는 먼저 첫 번째 포트에 바인드를 시도해야합니다. 실패 할 경우에만 실패하고 두 번째 포트에 바인드를 시도해야합니다.

편집

내가 프로그래밍 방식 achived 수 있습니다 알려져 있지만 내 의도는 선언적 (.config 파일 만 사용) 할 수 있습니다.

답변

2

프록시 개체를 사용하여 연결을 열기 전에 포트 번호를 포함하여 끝점 주소를 프로세스의 모든 지점에서 코드에 설정할 수 있습니다. 따라서 주소를 설정 한 다음 연결을 테스트하고 실패 할 경우 다른 포트를 사용해보십시오. 희망적으로 내 요점을 설명하는 코드가 있습니다.

Dim oProxy as New YourWCFServiceType() 

oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try first")) 

Dim FirstBindingSucceeded as Boolean 
Try 
    oProxy.Open() 
    FirstBindingSucceeded = True 
Catch 
End Try 

If FirstBindingSucceeded = False Then 
    oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try second")) 
End If 

oProxy.Open() 
+0

나는 그것을 선언적으로하고 싶습니다. –

+0

나는 여전히 내 대답이 당신의 질문에 대답한다고 생각합니다. .config 파일에 정의 된 끝점은 단지 기본값입니다. 두 개의 서로 다른 주소/포트 중 하나를 선택하려면 설정에 설정을 추가하고 필요할 때 읽어보십시오. <키 = "FailOverURL"값 = "URL이"추가 /> 제 생각 , 오버 헤드가 상당히 저하 될 것이다 쉬라즈 Bhaiji 설명 계약 유형의 전환과 관련된 양 기본적으로 정의 된 두 개의 엔드 포인트를 갖는 이점. 세 번째 포트가 필요할 때 어떻게됩니까? –

1

서버 쪽에서는 두 바인딩으로 서비스를 노출해도 아무런 문제가 없습니다.

그러나 클라이언트 측에서 당신이 (그 효과 나 단어) 중복 계약 오류는 두 개의 인터페이스 이름을 제외하고 동일합니다 (계약서)를 작성하는 것입니다 할

방법 중 하나를 얻을 것이다

.

구현의 복사본이 하나 있습니다. 각 서비스는이 구현을 상속합니다.

그러면 구현/기능이 동일한 다른 포트에 두 개의 서비스가 있습니다.

클라이언트에서는 먼저 첫 번째 포트를 시도하고 실패하면 두 번째 포트를 시도하도록 프로그래밍해야합니다.