다음을 통해 공유


주소 헤더

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

비고

이 샘플에 대한 설치 절차 및 빌드 지침은 이 항목의 끝에 있습니다.

WS-Addressing 사양은 특정 웹 서비스 엔드포인트를 해결하는 방법으로 엔드포인트 참조의 개념을 정의합니다. WCF에서 엔드포인트 참조는 EndpointAddress 클래스로 모델링된 것입니다. EndpointAddress 클래스의 주소 필드 유형은 ServiceEndpoint입니다.

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

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

클라이언트

클라이언트가 참조 매개 변수를 보내려면 AddressHeaderEndpointAddressServiceEndpoint을 추가해야 합니다. EndpointAddress 클래스는 변경할 수 없으므로, 엔드포인트 주소를 수정하려면 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 샘플 에 대한One-Time 설정 절차를 수행했는지 확인합니다.

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

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