IWsdlExportExtension 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义可导出自定义元数据的终结点或协定行为。
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);
}
}
}
}
}
注解
若要修改和扩展 WsdlExporter 对象导出的 Web 服务描述语言 (WSDL),请在终结点、协定或操作行为(一个实现 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) |
为协定将自定义 Web 服务描述语言 (WSDL) 元素写入到生成的 WSDL 中。 |
ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) |
为终结点将自定义 Web 服务描述语言 (WSDL) 元素写入到生成的 WSDL 中。 |