다음을 통해 공유


주소 헤더

주소 헤더 샘플은 클라이언트가 WCF(Windows Communication Foundation)를 사용하여 참조 매개 변수를 서비스에 전달할 수 있는 방법을 보여 줍니다.

참고 항목

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

WS-Addressing 사양은 특성 웹 서비스 엔드포인트의 주소를 지정하는 방법으로 엔드포인트 참조의 개념을 정의합니다. WCF에서 엔드포인트 참조는 EndpointAddress 클래스를 사용하여 모델링됩니다. EndpointAddressServiceEndpoint 클래스의 주소 필드 형식입니다.

엔드포인트 참조 모델의 일부에서 각 참조는 추가 식별 정보를 추가하는 일부 참조 매개 변수를 전달할 수 있습니다. WCF에서 이러한 참조 매개 변수는 AddressHeader 클래스의 인스턴스로 모델링됩니다.

이 샘플에서 클라이언트는 클라이언트 엔드포인트의 EndpointAddress에 참조 매개 변수를 추가합니다. 서비스는 이 참조 매개 변수를 찾아서 "Hello" 서비스 작업의 논리에 해당 값을 사용합니다.

클라이언트

클라이언트는 참조 매개 변수를 보내려면 AddressHeaderEndpointAddressServiceEndpoint를 추가해야 합니다. ph x="1" /> 클래스를 변경할 수 없으므로 엔드포인트 주소 수정은 EndpointAddressBuilder 클래스를 사용하여 수행해야 합니다. 다음 코드에서는 해당 메시지의 일부로 참조 매개 변수를 보내도록 클라이언트를 초기화합니다.

HelloClient client = new HelloClient();
EndpointAddressBuilder builder =
    new EndpointAddressBuilder(client.Endpoint.Address);
AddressHeader header =
    AddressHeader.CreateAddressHeader(IDName, IDNamespace, "John");
builder.Headers.Add(header);
client.Endpoint.Address = builder.ToEndpointAddress();

이 코드는 원래 EndpointAddressBuilder를 초기 값으로 사용하여 EndpointAddress를 만듭니다. 그런 다음 새로 만들어진 주소 헤더를 추가합니다. CreateAddressHeader를 호출하면 특정 이름, 네임스페이스 및 값이 있는 헤더가 만들어집니다. 여기서 값은 "John"입니다. 헤더가 작성기에 추가되고 나면 ToEndpointAddress() 메서드는 변경할 수 있는 작성기를 변경할 수 없는 엔드포인트 주소로 다시 변환하고 이 주소는 클라이언트 엔드포인트의 주소 필드에 할당됩니다.

이제 클라이언트가 Console.WriteLine(client.Hello());를 호출하면 클라이언트의 결과 출력에 나온 것처럼 서비스는 이 주소 매개 변수의 값을 가져올 수 있습니다.

Hello, John

서버

서비스 작업 Hello()의 구현에서는 현재 OperationContext를 사용하여 들어오는 메시지에서 헤더 값을 검사합니다.

string id = null;
// look at headers on incoming message
for (int i = 0;
     i < OperationContext.Current.IncomingMessageHeaders.Count;
     ++i)
{
    MessageHeaderInfo h = OperationContext.Current.IncomingMessageHeaders[i];
    // for any reference parameters with the correct name & namespace
    if (h.IsReferenceParameter &&
        h.Name == IDName &&
        h.Namespace == IDNamespace)
    {
        // read the value of that header
        XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
        id = xr.ReadElementContentAsString();
    }
}
return "Hello, " + id;

이 코드는 들어오는 메시지의 모든 헤더를 반복하여 특정 이름을 가진 참조 매개 변수인 헤더를 찾습니다. 매개 변수가 발견되면 매개 변수의 값을 읽고 "id" 변수에 저장합니다.

샘플을 설치, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Building the Windows Communication Foundation Samples의 지침을 따릅니다.

  3. 단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.