Megosztás a következőn keresztül:


Útmutató: Egyéni házirend-állítások importálása

A házirend-állítások egy szolgáltatásvégpont képességeit és követelményeit írják le. Az ügyfélalkalmazások a szolgáltatás metaadataiban házirend-állításokkal konfigurálhatják az ügyfélkötést, vagy testre szabhatják a szolgáltatásvégpont szolgáltatási szerződését.

Az egyéni házirend-állítások importálásához implementálja az System.ServiceModel.Description.IPolicyImportExtension interfészt, és átadja az objektumot a metaadat-rendszernek, vagy regisztrálja a megvalósítás típusát az alkalmazáskonfigurációs fájlban. Az interfész implementációinak IPolicyImportExtension paraméter nélküli konstruktort kell biztosítaniuk.

Egyéni házirend-állítások importálása

  1. Implementálja a System.ServiceModel.Description.IPolicyImportExtension felületet egy osztályon. Lásd az alábbi eljárásokat.

  2. Szúrja be az egyéni szabályzatimportőrt a következővel:

  3. Konfigurációs fájl használata. Lásd az alábbi eljárásokat.

  4. Konfigurációs fájl használata ServiceModel Metadata Segédprogrammal (Svcutil.exe). Lásd az alábbi eljárásokat.

  5. Programozott módon szúrja be a szabályzatimportálót. Lásd az alábbi eljárásokat.

A System.ServiceModel.Description.IPolicyImportExtension felület implementálása bármely osztályban

  1. IPolicyImportExtension.ImportPolicy A metódusban minden olyan szabályzattulajdonos esetében, amely érdekli, keresse meg az importálni kívánt házirend-állításokat a megfelelő metódus meghívásával (a kívánt állítás hatókörétől függően) a System.ServiceModel.Description.PolicyConversionContext metódusnak átadott objektumon. Az alábbi példakód bemutatja, hogyan lehet a PolicyAssertionCollection.Remove metódust használni az egyéni szabályzat-állítás megkereséséhez és a gyűjteményből való eltávolításához egy lépésben. Ha az eltávolítási módszerrel megkeresi és eltávolítja az állítást, nem kell végrehajtania a 4. lépést.

    // 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;
    }
    
    ' 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
    
  2. A házirend-állítások feldolgozása. Vegye figyelembe, hogy a szabályzatrendszer nem normalizálja a beágyazott szabályzatokat és wsp:optionala . Ezeket a szerkezeteket a szabályzat importálási bővítményének implementálásában kell feldolgoznia.

  3. Végezze el a kötés vagy szerződés testreszabását, amely támogatja a házirend-állítás által meghatározott képességet vagy követelményt. Az állítások általában azt jelzik, hogy egy kötéshez egy adott konfiguráció vagy egy adott kötési elem szükséges. Végezze el ezeket a módosításokat a PolicyConversionContext.BindingElements tulajdonság eléréséhez. Egyéb állítások esetén módosítania kell a szerződést. A szerződést a tulajdonság használatával PolicyConversionContext.Contract érheti el és módosíthatja. Vegye figyelembe, hogy a szabályzatimportáló többször is meghívható ugyanahhoz a kötéshez és szerződéshez, de a szabályzat alternatíváinak importálása meghiúsul. A kódnak rugalmasnak kell lennie ehhez a viselkedéshez.

  4. Távolítsa el az egyéni házirend-állítást az állítási gyűjteményből. Ha nem távolítja el a Windows Communication Foundation (WCF) állítást, feltételezi, hogy a házirend importálása sikertelen volt, és nem importálja a társított kötést. Ha ezzel a PolicyAssertionCollection.Remove módszerrel megkereste az egyéni házirend-állítást, és egy lépésben eltávolította azt a gyűjteményből, nem kell elvégeznie ezt a lépést.

Az egyéni szabályzatimportőr beszúrása a metaadatrendszerbe konfigurációs fájl használatával

  1. Adja hozzá az importáló típust az <extensions> ügyfélkonfigurációs fájl PolicyImporters> elemén belüli <elemhez.

    <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>
    
  2. Az ügyfélalkalmazásban használja vagy oldja fel a System.ServiceModel.Description.MetadataResolverSystem.ServiceModel.Description.WsdlImporter metaadatokat, és a rendszer automatikusan meghívja az importálót.

    // 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"))
    

Az egyéni szabályzatimportőr beszúrása a metaadat-rendszerbe Svcutil.exe

  1. Adja hozzá az importáló típusát a <extensions><Svcutil.exe.config konfigurációs fájl PolicyImporters> elemében található elemhez. Az Svcutil.exe másik konfigurációs fájlban regisztrált házirendimportőr-típusok betöltésére is rámutathat a /svcutilConfig beállítás használatával.

  2. A ServiceModel metadata segédprogrammal (Svcutil.exe) importálhatja a metaadatokat, és a rendszer automatikusan meghívja az importálót.

Az egyéni szabályzatimportőr programozott beszúrása a metaadat-rendszerbe

  1. Adja hozzá az importálót a MetadataImporter.PolicyImportExtensions tulajdonsághoz (például ha a ) a System.ServiceModel.Description.WsdlImportermetaadatok importálása előtt használja.

Lásd még