Поделиться через


Заголовки адресов

В образце заголовков адреса показан процесс передачи клиентами ссылочных параметров в службу с помощью Windows Communication Foundation (WCF).

Aa395213.note(ru-ru,VS.100).gifПримечание
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.

Спецификация WS-Addressing определяет понятие ссылки на конечную точку как способа обращения к определенной конечной точке веб-службы. В WCF ссылки на конечные точки моделируются с помощью класса EndpointAddress. EndpointAddress — это тип поля адреса класса ServiceEndpoint.

Особенностью модели ссылки на конечную точку является то, что каждая ссылка может содержать несколько ссылочных параметров, которые добавляют дополнительные идентификационные сведения. В WCF эти ссылочные параметры моделируются как экземпляры класса AddressHeader.

В этом образце клиент добавляет ссылочный параметр в EndpointAddress конечной точки клиента. Служба ищет этот ссылочный параметр и использует его значение в логике операции службы "Привет".

Клиент

Чтобы клиент мог отправить ссылочный параметр, он должен добавить заголовок AddressHeader в адрес EndpointAddress конечной точки ServiceEndpoint. Поскольку класс 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 в качестве первоначального значения. Затем он добавляет только что созданный заголовок адреса. Вызов CreateAddressHeadercreates создает заголовок с определенным именем, пространством имен и значением. В этом случае значением является "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, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.

  3. Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.

Aa395213.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Basic\Client\AddressHeaders