IPolicyImportExtension.ImportPolicy Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Definisce un metodo che può importare asserzioni di criteri personalizzate e aggiungere elementi dell'associazione di implementazione.
public:
void ImportPolicy(System::ServiceModel::Description::MetadataImporter ^ importer, System::ServiceModel::Description::PolicyConversionContext ^ context);
public void ImportPolicy (System.ServiceModel.Description.MetadataImporter importer, System.ServiceModel.Description.PolicyConversionContext context);
abstract member ImportPolicy : System.ServiceModel.Description.MetadataImporter * System.ServiceModel.Description.PolicyConversionContext -> unit
Public Sub ImportPolicy (importer As MetadataImporter, context As PolicyConversionContext)
Parametri
- importer
- MetadataImporter
L'oggetto MetadataImporter in uso.
- context
- PolicyConversionContext
Oggetto PolicyConversionContext che contiene entrambe le asserzioni di criteri che possono essere importate e le raccolte di elementi dell'associazione ai quali è possibile aggiungere gli elementi dell'associazione di implementazione.
Esempio
Nell'esempio di codice seguente viene illustrato come utilizzare il metodo PolicyAssertionCollection.Remove per individuare, restituire e rimuovere l'asserzione in un passaggio.
#region IPolicyImporter Members
public const string name1 = "acme";
public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";
/*
* Importing policy assertions usually means modifying the bindingelement stack in some way
* to support the policy assertion. The procedure is:
* 1. Find the custom assertion to import.
* 2. Insert a supporting custom bindingelement or modify the current binding element collection
* to support the assertion.
* 3. Remove the assertion from the collection. Once the ImportPolicy method has returned,
* any remaining assertions for the binding cause the binding to fail import and not be
* constructed.
*/
public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
{
Console.WriteLine("The custom policy importer has been called.");
// Locate the custom assertion and remove it.
XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
if (customAssertion != null)
{
Console.WriteLine(
"Removed our custom assertion from the imported "
+ "assertions collection and inserting our custom binding element."
);
// Here we would add the binding modification that implemented the policy.
// This sample does not do this.
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
Console.WriteLine(customAssertion.OuterXml);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
#endregion
#Region "IPolicyImporter Members"
Public Const name1 As String = "acme"
Public Const ns1 As String = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions"
'
' * Importing policy assertions usually means modifying the bindingelement stack in some way
' * to support the policy assertion. The procedure is:
' * 1. Find the custom assertion to import.
' * 2. Insert a supporting custom bindingelement or modify the current binding element collection
' * to support the assertion.
' * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned,
' * any remaining assertions for the binding cause the binding to fail import and not be
' * constructed.
'
Public Sub ImportPolicy(ByVal importer As MetadataImporter, ByVal context As PolicyConversionContext) Implements IPolicyImportExtension.ImportPolicy
Console.WriteLine("The custom policy importer has been called.")
' Locate the custom assertion and remove it.
Dim customAssertion As XmlElement = context.GetBindingAssertions().Remove(name1, ns1)
If customAssertion IsNot Nothing Then
Console.WriteLine("Removed our custom assertion from the imported " & "assertions collection and inserting our custom binding element.")
' Here we would add the binding modification that implemented the policy.
' This sample does not do this.
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine(customAssertion.NamespaceURI & " : " & customAssertion.Name)
Console.WriteLine(customAssertion.OuterXml)
Console.ForegroundColor = ConsoleColor.Gray
End If
End Sub
#End Region
Nell'esempio di codice seguente viene mostrato il file di configurazione dell'applicazione client per caricare l'utilità di importazione di criteri personalizzata quando viene richiamata la classe System.ServiceModel.Description.MetadataResolver.
<client>
<endpoint
address="http://localhost:8080/StatefulService"
binding="wsHttpBinding"
bindingConfiguration="CustomBinding_IStatefulService"
contract="IStatefulService"
name="CustomBinding_IStatefulService" />
<metadata>
<policyImporters>
<extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
</policyImporters>
</metadata>
</client>
Nell'esempio di codice seguente viene illustrato come utilizzare MetadataResolver per scaricare e risolvere i metadati in oggetti della descrizione.
// Download all metadata.
ServiceEndpointCollection endpoints
= MetadataResolver.Resolve(
typeof(IStatefulService),
new EndpointAddress("http://localhost:8080/StatefulService/mex")
);
' Download all metadata.
Dim endpoints As ServiceEndpointCollection = MetadataResolver.Resolve(GetType(IStatefulService), New EndpointAddress("http://localhost:8080/StatefulService/mex"))
Commenti
Implementare il metodo ImportPolicy
per ottenere asserzioni di criteri ed eseguire modifiche del contratto o dell'associazione importati per supportare l'asserzione. In genere, un'utilità di importazione di criteri risponde alla richiesta di trovare un'asserzione di criteri personalizzata configurando o inserendo un elemento dell'associazione nell'associazione in corso di importazione.
Windows Communication Foundation (WCF) passa due oggetti al ImportPolicy metodo, a MetadataImporter e a PolicyConversionContext. In genere l'oggetto PolicyConversionContext contiene già le asserzioni di criteri per ogni ambito dell'associazione.
Un'implementazione IPolicyImportExtension consente di eseguire i passaggi seguenti:
Trovare l'asserzione di criteri personalizzata per la quale è responsabile chiamando i metodi GetBindingAssertions, GetMessageBindingAssertions o GetOperationBindingAssertions, a seconda dell'ambito.
Rimuovere l'asserzione di criteri dalla raccolta di asserzioni. Il metodo PolicyAssertionCollection.Remove trova, restituisce e rimuove l'asserzione in un passaggio.
Modifica lo stack dell'associazione o il contratto aggiungendo un elemento BindingElement personalizzato e obbligatorio alla proprietà BindingElements o modificando la proprietà PolicyConversionContext.Contract.
Il passaggio 2 è importante. Dopo aver chiamato tutti gli importatori di criteri, WCF verifica l'esistenza di eventuali asserzioni di criteri che rimangono. Se esiste, WCF presuppone che l'importazione dei criteri non sia riuscita e non importa l'associazione associata.