Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере заголовков адресов показано, как клиенты могут передавать ссылочные параметры службе с помощью Windows Communication Foundation (WCF).
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Спецификация WS-Addressing определяет понятие ссылки на конечную точку в качестве способа решения конкретной конечной точки веб-службы. В WCF ссылки на конечные точки моделируются с помощью класса EndpointAddress — EndpointAddress является типом поля Address класса ServiceEndpoint.
Часть эталонной модели конечной точки заключается в том, что каждая ссылка может содержать некоторые эталонные параметры, добавляющие дополнительные сведения об идентификации. В WCF эти эталонные параметры моделироваются как экземпляры AddressHeader класса.
В этом примере клиент добавляет ссылочный параметр в клиентскую конечную точку EndpointAddress. Служба ищет этот ссылочный параметр и использует его значение в логике операции службы Hello.
Клиент
Чтобы клиент мог отправить ссылочный параметр, он должен добавить 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 в качестве начального значения. Затем он добавляет только что созданный заголовок адреса, вызывая CreateAddressHeader для создания заголовка с определенным именем, пространством имен и значением. Значение здесь – "Джон". После добавления заголовка в построитель, метод 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.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.