PolicyConversionContext Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет класс, используемый для получения операторов контроля привязки в метаданных и для присоединения реализации элементов привязки в соответствующей области.
public ref class PolicyConversionContext abstract
public abstract class PolicyConversionContext
type PolicyConversionContext = class
Public MustInherit Class PolicyConversionContext
- Наследование
-
PolicyConversionContext
Примеры
В следующем примере кода показана реализация метода ImportPolicy, который выполняет запись всех операторов контроля политики в консоль. Комментарии к коду описывают способы поиска отдельных операторов контроля настраиваемой политики и вставки реализации элемента привязки, а также удаления оператора контроля из коллекции.
public void ImportPolicy(MetadataImporter importer,
PolicyConversionContext context)
{
Console.WriteLine("The custom policy importer has been called.");
foreach (XmlElement assertion in context.GetBindingAssertions())
{
Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);
// locate a particular assertion by Name and NamespaceURI
XmlElement customAssertion = context.GetBindingAssertions().Find(name1, ns1);
if (customAssertion != null)
{
// Found assertion; remove from collection.
context.GetBindingAssertions().Remove(customAssertion);
Console.WriteLine(
"Removed our custom assertion from the imported "
+ "assertions collection and inserting our custom binding element."
);
// Here if you find the custom policy assertion that you are looking for,
// add the custom binding element that handles the functionality that the policy indicates.
// Attach it to the PolicyConversionContext.BindingElements collection.
// For example, if the custom policy had a "speed" attribute value:
/*
string speed
= customAssertion.GetAttribute(SpeedBindingElement.name2, SpeedBindingElement.ns2);
SpeedBindingElement e = new SpeedBindingElement(speed);
context.BindingElements.Add(e);
*/
}
// write assertion name in red.
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);
//write contents in gray.
Console.WriteLine(assertion.OuterXml);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
В следующем примере кода показано, как регистрировать IPolicyImportExtension реализации с помощью раздела конфигурации <policyImporters>
.
<configuration>
<system.serviceModel>
<client>
<metadata>
<policyImporters>
<extension type="CustomPolicyImporter, assembly"/>
</policyImporters>
</metadata>
</client>
</system.serviceModel>
</configuration>
В следующем примере кода показаны способы реализации элемента настраиваемой привязки IPolicyExportExtension для присоединения оператора контроля настраиваемой политики к операторам контроля привязки.
public class MyBindingElement : BindingElement, IPolicyExportExtension
{
// BindingElement implementation . . .
public void ExportPolicy(
MetadataExporter exporter, PolicyConversionContext context)
{
XmlDocument xmlDoc = new XmlDocument();
XmlElement xmlElement =
xmlDoc.CreateElement("MyPolicyAssertion");
context.GetBindingAssertions().Add(xmlElement);
}
// Note: All custom binding elements must return a deep clone
// to enable the run time to support multiple bindings using the
// same custom binding.
public override BindingElement Clone()
{
// this is just a placeholder
return null;
}
// Call the inner property.
public override T GetProperty<T>(BindingContext context)
{
return context.GetInnerProperty<T>();
}
}
public class Program {
public static void Main(string[] args) {
EndpointAddress address =
new EndpointAddress("http://localhost/metadata");
CustomBinding customBinding =
new CustomBinding(new BasicHttpBinding());
customBinding.Elements.Add(new MyBindingElement());
ContractDescription contract =
ContractDescription.GetContract(typeof(MyContract));
ServiceEndpoint endpoint =
new ServiceEndpoint(contract, customBinding, address);
MetadataExporter exporter = new WsdlExporter();
exporter.ExportEndpoint(endpoint);
}
}
Комментарии
Реализация PolicyConversionContext передается объектам IPolicyExportExtension и IPolicyImportExtension для экспорта и импорта операторов контроля политики в/из метаданных, соответственно. Во время экспорта коллекция операторов контроля политики извлекается для добавления настраиваемых операторов контроля. При импорте операторы контроля извлекаются для импортирования отдельных операторов и конфигурации элементов привязки, соответственно.
Метод GetBindingAssertions возвращает все операторы контроля политики, для которых требуется привязка.
Метод GetFaultBindingAssertions возвращает все операторы контроля политики для отдельных сообщений об ошибках.
Метод GetMessageBindingAssertions возвращает все операторы контроля политики для отдельных сообщений об ошибках.
Метод GetOperationBindingAssertions возвращает все операторы контроля политики для отдельных операций.
Свойство BindingElements получает элементы привязки для описываемой или настраиваемой привязки.
Свойство Contract получает описание контракта, для которого описывается или настраивается привязка.
Конструкторы
PolicyConversionContext(ServiceEndpoint) |
Инициализирует новый экземпляр класса PolicyConversionContext, используя конечную точку. |
Свойства
BindingElements |
Получает коллекцию элементов привязки, к которым добавляются элементы настраиваемой привязки, реализующие операторы контроля политики. |
Contract |
Получает контракт для конечной точки. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetBindingAssertions() |
Получает коллекцию операторов контроля политики из метаданных. |
GetFaultBindingAssertions(FaultDescription) |
Возвращает коллекцию операторов контроля политики для указанной ошибки SOAP. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetMessageBindingAssertions(MessageDescription) |
Получает коллекцию операторов контроля политики для сообщения. |
GetOperationBindingAssertions(OperationDescription) |
Возвращает коллекцию операторов контроля политики для указанной операции. |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |