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 интерфейс в конечной точке, контракте или поведении операции (объект, реализующий IContractBehaviorIEndpointBehaviorлибо , или 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 с свойствами и ServiceEndpoint объектамиContractDescription.
IWsdlExportExtension Если реализация создает исключение при экспорте, созданные метаданные находится в несогласованном состоянии, и WsdlExporter объект должен быть удален.
Замечание
Пользовательское расширение экспорта должно выполняться после заполнения описания службы встроенным сериализатором.
Методы
| Имя | Описание |
|---|---|
| ExportContract(WsdlExporter, WsdlContractConversionContext) |
Записывает настраиваемые элементы языка описания веб-служб (WSDL) в созданный WSDL для контракта. |
| ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) |
Записывает пользовательские элементы языка описания веб-служб (WSDL) в созданный WSDL для конечной точки. |