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。 |