IWsdlExportExtension Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Define los comportamientos del punto de conexión o del contrato que pueden exportar los metadatos personalizados.
public interface class IWsdlExportExtension
public interface IWsdlExportExtension
type IWsdlExportExtension = interface
Public Interface IWsdlExportExtension
- Derivado
Ejemplos
El ejemplo de código siguiente muestra IWsdlExportExtension que agrega los atributos de documentación personalizados al archivo WSDL como anotaciones del 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);
}
}
}
}
}
Comentarios
Para modificar y extender el Lenguaje de descripción de servicios Web (WSDL) exportado por objetos WsdlExporter, ha de implementarse la interfaz IWsdlExportExtension en un punto de conexión, contrato o comportamiento de la operación (un objeto que implementa o IContractBehavior, IEndpointBehavioro IOperationBehavior) y agregar el comportamiento a Behaviors, Behaviorso la propiedad Behaviors. Además, también puede implementar IWsdlExportExtension en un BindingElement.
Nota
IWsdlExportExtensionLas implementaciones nunca se invocan si se implementan como .IServiceBehavior
IWsdlExportExtension no exporta aserciones de directiva personalizadas aunque Windows Communication Foundation (WCF) exporte las aserciones de directiva de enlace personalizadas al elemento adecuado dentro de WSDL. Si desea exportar las aserciones de directiva personalizadas, implemente la interfaz IPolicyExportExtension.
El proceso de publicación de metadatos comienza llamando a WsdlExporter.ExportEndpoints que a su vez llama a WsdlExporter.ExportEndpoint para cada extremo.
El extremo se exporta exportando primero su contrato. Cuando se exporta un contrato el System.ServiceModel.Description.WsdlExporter llama al método IWsdlExportExtension.ExportContract en todas las implementaciones IWsdlExportExtension del contrato, y los comportamientos de la operación para ese contrato. Las operaciones que utilizan las acciones de carácter comodín no se exportan en metadatos, por lo que no se exportan las implementaciones IWsdlExportExtension en los comportamientos de operación para estas operaciones.
Después de exportar el contrato, el puerto y el enlace se exportan y se asocian las expresiones de directiva exportadas.
ExportContract y los métodos ExportEndpoint proporcionan el acceso a las WsdlExporter para que IWsdlExportExtension implementaciones puedan crear informes de errores irrecuperables y advertencias a través de la propiedad Errors. Los objetos de contexto pasados a ambos métodos proporcionan las asignaciones convenientes desde los elementos WSDL exportados a las propiedades de ContractDescription y los objetos ServiceEndpoint.
Si una implementación IWsdlExportExtension produce una excepción en exportación, los metadatos generados están en un estado incoherente y se debería descartar el objeto WsdlExporter.
Nota
La extensión de exportación personalizada se debe ejecutar cuando el serializador integrado rellene la descripción del servicio.
Métodos
ExportContract(WsdlExporter, WsdlContractConversionContext) |
Escribe los elementos del lenguaje de descripción de servicios Web (WSDL) personalizados en el WSDL generado para un contrato. |
ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) |
Escribe los elementos del lenguaje de descripción de servicios Web (WSDL) personalizados en el WSDL generado para un punto de conexión. |