2013-03-04 4 views
8

프록시와 채널에 대해 혼란스러워합니다. 내 독서에 따르면 WCF 클라이언트는 채널 체인을 통해 메시지를 전달하는 프록시를 사용하고 있습니다. 모든 채널은 특정 작업을 담당합니다. 예를 들어 한 채널은 메시지를 인코딩하고 다른 채널은이를 암호화합니다. 나는 다음과 같은 코드WCF 채널에 대한 혼동

proxy.MyMethod()이라고합니다
  • 을보고

    내 혼란은 실제로 채널의 전체 체인라고 시작?

  • 저자는 CreateChannel이라는 메서드를 사용하고 식별자 프록시라는 이름을 사용했습니다. WCF 아키텍처에서 Proxy는 단지 공간적인 상위 채널 일뿐입니다. 독립 실행 형 아키텍처 요소가 아닙니다.

    Binding binding = new NetTcpBinding(); 
    EndpointAddress address = new EndpointAddress("net.tcp://localhost:8000"); 
    IMyContract proxy = ChannelFactory<IMyContract>.CreateChannel(binding,address); 
    using(proxy as IDisposable) 
    { 
        proxy.MyMethod(); 
    } 
    

답변

3

예, 나는 당신이 정확하게이 설명 생각합니다. WCF는 개발자가 web.config에서 구성하는 경향이 있고 주위에 C# 코드를 작성하지 않는이 "채널"개념 인 을 사용합니다.

이들은 Channel Model Overview에 설명되어 있습니다.

ChannelFactory.CreateChannel(binding,address);을 호출하면 프레임 워크가 구성 을보고 모든 채널을 하나의 개체로 만듭니다. 그래서 예, 프록시는 채널 스택과 같습니다.

마지막부터 하나의 개체로 상호 작용합니다. 이 프레임 워크는 개별 채널의 구현을 다룹니다. 을 적절하게 구성 할 수 있도록이 계층을 통과한다는 것을 이해하는 것이 좋습니다.

10

WCF에는 계약, 주소 및 바인딩이라는 3 가지 주요 구성 요소가 있습니다. 채널은이 세 부분에 따라 제작되는 파이프입니다. 클라이언트와 서버, 그리고 적절한 전송의 정리 -

enter image description here

채널의 목적은 그 모두에 대한 이해, 형식으로 메시지를 수정하는 것입니다. 이를 위해 전송 및 프로토콜 채널이 사용됩니다. 이 과정을 더 쉽게하기 위해 바인딩을 사용합니다. 각 바인딩은 채널 스택의 일부 채널을 나타내는 요소로 구성됩니다.

그래서 메서드를 호출 할 때마다 DataContract에 따라 메시지를 구성하고 채널 전체 체인을 전달합니다. 각 채널은 메시지를 수정합니다. prosses 정말 추상화 단지 수준이

enter image description here

은 WCF 프록시처럼 보인다. out-of-process 서비스의 in-process 대표입니다. 바인딩 요소 및 클라이언트 측과 서버 측이 서로를 이해할 수있게하는 dataContract에 따라 적절하게 구성된 객체로 상상할 수 있습니다.

0

이 경우 "프록시"는 소프트웨어 디자인 패턴에 대한 참조입니다. From Wikipedia :

프록시, 가장 일반적인 형태로, 다른 일에 인터페이스와 같은 수준의 기능입니다.프록시는 네트워크 연결, 메모리의 큰 개체, 파일 또는 복제 할 비용이 많거나 불가능한 다른 리소스와 같은 인터페이스에 연결할 수 있습니다. WCF의 경우

는 ChannelFactory에 <는> .CreateChannel 구성에 기초 channel stack를 생성한다. 각 채널은 그 아래의 채널에 추상화를 제공합니다. 예를 들어 단순화 된 채널 스택 수 있습니다 :

  • 채널 1 직렬화 SOAP 메시지에 .NET 개체
  • 채널 2는 메시지
  • 채널 3 인코딩 메시지에 보안 정보를 추가 TCP를 통해 확인할 수 있습니다 .

나는 모든 것을 이해한다고 생각합니다.

"프록시"사용으로 돌아 가기 : 스택의 모든 채널은 그 아래의 채널에 대한 프록시입니다. 즉 최종 목적지는 채널이 없습니다. 모든 채널은 "다른 것과의 인터페이스"입니다. 그러나 채널 스택을 아래로 이동하면 다른 채널이 호출자에게 다른 인터페이스/추상화 (.NET 객체, SOAP 메시지 등)를 제공합니다.

이 토론은 질문에 대답하고 의도적으로 단순화하기위한 것입니다.

클라이언트 코드를 작성할 때 가장 유용한 인터페이스는 .NET 개체를 이해하는 인터페이스입니다. 이것을 알면 ChannelFactory는 서비스 계약과 일치하는 .NET 인터페이스가있는 스택 맨 위에있는 채널을 반환합니다. SOAP 메시지를 문자열로 생성하고, 채널 스택을 따라 내려가거나, 사용자 정의 스택을 생성하고, 원시 SOAP 메시지를 수락하는 채널을 찾고, "프록시"라고 레이블을 지정하고 직접 호출하는 것이 유효합니다.

작성자는 CreateChannel이라는 메서드를 사용하고 식별자를 프록시라고 명명했습니다. 그래서 WCF 아키텍처 Proxy는 단지 특별한 상위 레벨입니다 채널, 독립형 아키텍처 요소가 아닙니다?

채널은 프록시 소프트웨어 디자인 패턴을 구현하는 아키텍처 요소입니다. 모든 채널은 프록시입니다. 클라이언트 코드를 작성할 때 .NET 운영 계약을 수락하므로 최상위 채널이 가장 유용합니다.