Заголовки адресов
В образце заголовков адреса показан процесс передачи клиентами ссылочных параметров в службу с помощью Windows Communication Foundation (WCF).
![]() |
---|
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела. |
Спецификация 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".
Настройка, построение и выполнение образца
Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Чтобы выполнить построение версии решения для языка C# или Visual Basic .NET, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.
Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\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
|