2009-07-28 1 views
13

WCF 클라이언트 끝점에 사용자 지정 동작 확장을 추가해야합니다. 구성을 통해이 작업을 시도했지만 WFC 구성에서 형식 이름을 올바르게 구문 분석 할 수없는 자주 언급되는 버그에 물 렸습니다. 그래서 대신 프로그래밍 방식으로이 작업을 수행 할 수 있습니까?프로그래밍 방식으로 전역 적으로 사용자 지정 WCF 클라이언트 끝점 동작 확장을 추가합니다.

구성 섹션은 읽기 전용이므로 런타임에 수정할 수 없습니다. Client Proxy 인스턴스 (예 : ClientBase)를 얻으면 Endpoint.Behaviors에 내 맞춤 동작 인스턴스를 추가 할 수 있습니다. 그러나 각 인스턴스에 대해이 작업을 수행해야합니다.

엔드 포인트로 전역 적으로 도달하여 사전에 추가 할 수 있습니까 (예 : Global.asax)? 아니면 이러한 엔드 포인트를 인스턴스화하고 일시적으로 삭제할 수 있습니까?

+0

형식 이름을 올바르게 구문 분석하지 않는 문제에 대한 링크를 게시 할 수 있습니까? –

답변

14

이 같은 코드 뭔가에 클라이언트에 동작을 추가 할 수 있어야한다 : 그 행동이 이미 두 번 적용 피하기 위해 적용된 경우

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>(); 

if(behavior == null) 
{ 
    client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation()); 
} 

첫 번째 줄은 확인합니다. 아직 적용되지 않은 경우 (.Find() 호출이 null을 반환 함) 프로그래밍 방식으로 해당 동작을 클라이언트 클래스에 추가 할 수 있습니다.

분명히 서비스에 대한 첫 번째 호출을하기 전에이 모든 작업을 수행해야합니다. 일단 그렇게하면 더 이상 클라이언트를 변경할 수 없습니다.

마크

+1

그것은 현재 우리가 사용하고있는 솔루션 중 하나입니다. 문제는 우리가 지연 초기화하는 것입니다. 나는 Global.asax에서보다 능동적 인 접근법을 선호 할 것입니다. 그것은 둘 중 하나를 응용 프로그램 구성 (본질적으로 전역)에 넣을 수 있거나 처음 사용할 때 프로그래밍 방식으로 구성 할 수 있지만 프로그램 적으로 전역 적으로 구성 할 수는 없습니다. – Trinition

관련 문제