IWsdlExportExtension Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет поведение конечной точки или контракта, которое может экспортировать настраиваемые метаданные.
public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
- Производный
Примеры
В следующем примере кода показан объект IWsdlExportExtension, которые добавляет настраиваемые атрибуты документации в файл WSDL как аннотации WSDL.
public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
{
Console.WriteLine("Inside ExportContract");
if (context.Contract != null)
{
// Inside this block it is the contract-level comment attribute.
// This.Text returns the string for the contract attribute.
// Set the doc element; if this isn't done first, there is no XmlElement in the
// DocumentElement property.
context.WsdlPortType.Documentation = string.Empty;
// Contract comments.
XmlDocument owner = context.WsdlPortType.DocumentationElement.OwnerDocument;
XmlElement summaryElement = Formatter.CreateSummaryElement(owner, this.Text);
context.WsdlPortType.DocumentationElement.AppendChild(summaryElement);
foreach (OperationDescription op in context.Contract.Operations)
{
Operation operation = context.GetOperation(op);
object[] opAttrs = op.SyncMethod.GetCustomAttributes(typeof(WsdlDocumentationAttribute), false);
if (opAttrs.Length == 1)
{
string opComment = ((WsdlDocumentationAttribute)opAttrs[0]).Text;
// This.Text returns the string for the operation-level attributes.
// Set the doc element; if this isn't done first, there is no XmlElement in the
// DocumentElement property.
operation.Documentation = String.Empty;
// Operation C# triple comments.
XmlDocument opOwner = operation.DocumentationElement.OwnerDocument;
XmlElement newSummaryElement = Formatter.CreateSummaryElement(opOwner, opComment);
operation.DocumentationElement.AppendChild(newSummaryElement);
// Get returns information
ParameterInfo returnValue = op.SyncMethod.ReturnParameter;
object[] returnAttrs = returnValue.GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
if (returnAttrs.Length == 1)
{
// <returns>text.</returns>
XmlElement returnsElement =
Formatter.CreateReturnsElement(
opOwner,
((WsdlParameterDocumentationAttribute)returnAttrs[0]).ParamComment
);
operation.DocumentationElement.AppendChild(returnsElement);
}
// Get parameter information.
ParameterInfo[] args = op.SyncMethod.GetParameters();
for (int i = 0; i < args.Length; i++)
{
object[] docAttrs
= args[i].GetCustomAttributes(typeof(WsdlParameterDocumentationAttribute), false);
if (docAttrs.Length != 0)
{
// <param name="Int1">Text.</param>
XmlElement newParamElement = opOwner.CreateElement("param");
XmlAttribute paramName = opOwner.CreateAttribute("name");
paramName.Value = args[i].Name;
newParamElement.InnerText
= ((WsdlParameterDocumentationAttribute)docAttrs[0]).ParamComment;
newParamElement.Attributes.Append(paramName);
operation.DocumentationElement.AppendChild(newParamElement);
}
}
}
}
}
Комментарии
Чтобы изменить и расширить язык WSDL, экспортированный объектами WsdlExporter, реализуйте интерфейс IWsdlExportExtension в поведении конечной точки, контракта или операции (объект, реализующий IContractBehavior, IEndpointBehavior или IOperationBehavior) и добавьте поведение к свойству Behaviors, Behaviors или Behaviors. Кроме того, также можно реализовать IWsdlExportExtension в BindingElement.
Примечание
IWsdlExportExtension реализации никогда не вызываются, если они реализуются как IServiceBehavior.
IWsdlExportExtension не экспортирует утверждения настраиваемой политики, даже если Windows Communication Foundation (WCF) экспортирует утверждения настраиваемой политики привязки в соответствующий элемент внутри WSDL. При необходимости экспортировать утверждения настраиваемой политики реализуйте интерфейс IPolicyExportExtension.
Процесс публикации метаданных начинается путем вызова метода WsdlExporter.ExportEndpoints, который, в свою очередь, вызывает WsdlExporter.ExportEndpoint для каждой конечной точки.
Конечная точка экспортируется путем первоначального экспорта ее контракта. При экспорте контракта System.ServiceModel.Description.WsdlExporter вызывает метод IWsdlExportExtension.ExportContract во всех реализациях IWsdlExportExtension в контракте и поведении операции для этого контракта. Операции, использующие подстановочные действия, не экспортируются в метаданные, так что реализации IWsdlExportExtension в поведении операции для этих операций не экспортируются.
После экспорта контракта экспортируются порт и привязка, а экспортированные выражения политики прикрепляются.
Методы ExportContract и ExportEndpoint обеспечивают доступ к WsdlExporter, так что реализации IWsdlExportExtension могут отчитываться об устранимых ошибках и предупреждениях посредством свойства Errors. Объекты контекста, переданные в оба метода, предоставляют удобные сопоставления из экспортированных элементов WSDL для свойств объектов ContractDescription и ServiceEndpoint.
Если в реализации IWsdlExportExtension возникает исключение при экспорте, созданные метаданные находятся в несогласованном состоянии, а объект WsdlExporter должен быть удален.
Примечание
Пользовательское расширение экспорта должен запускаться после того, как встроенный сериализатор заполнит описание службы.
Методы
ExportContract(WsdlExporter, WsdlContractConversionContext) |
Записывает пользовательские элементы языка описания служб (WSDL) в созданный WSDL для контракта. |
ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) |
Записывает пользовательские элементы WSDL в созданный код WSDL для конечной точки. |