Dela via


Funktionskompatibilitet för partiellt förtroende

Windows Communication Foundation (WCF) stöder en begränsad delmängd funktioner när den körs i en delvis betrodd miljö. Funktionerna som stöds i partiellt förtroende är utformade kring en specifik uppsättning scenarier enligt beskrivningen i avsnittet Distributionsscenarier som stöds.

Minimikrav för behörighet

WCF stöder en delmängd funktioner i program som körs under någon av följande standardnamnsbehörighetsuppsättningar:

  • Behörigheter för medelhögt förtroende

  • Internet Zone-behörigheter

Försök att använda WCF i delvis betrodda program med mer restriktiva behörigheter kan resultera i säkerhetsfel vid körning.

Kontrakt

Kontrakt omfattas av följande begränsningar när de körs under partiellt förtroende:

  • Tjänstklassen [ServiceContract] som implementerar gränssnittet måste vara public och ha en public konstruktor. Om den definierar [OperationContract] metoder måste dessa vara public. Om det i stället implementerar ett [ServiceContract] gränssnitt kan dessa metodimplementeringar vara explicita eller private, förutsatt att [ServiceContract] gränssnittet är public.

  • När du använder [ServiceKnownType] attributet måste den angivna metoden vara public.

  • [MessageContract] klasser och deras medlemmar kan vara public. [MessageContract] Om klassen definieras i programsammansättningen kan den vara internal och ha internal medlemmar.

Bindningar som tillhandahålls av systemet

Och BasicHttpBinding WebHttpBinding stöds fullt ut i en partiell förtroendemiljö. WSHttpBinding Stöds endast för transportsäkerhetsläge.

Bindningar som använder andra transporter än HTTP, till NetTcpBindingexempel , NetNamedPipeBinding, eller NetMsmqBinding, stöds inte när de körs i en partiell förtroendemiljö.

Anpassade bindningar

Anpassade bindningar kan skapas och användas i en partiell förtroendemiljö, men måste följa de begränsningar som anges i det här avsnittet.

Transporter

De enda tillåtna transportbindningselementen är HttpTransportBindingElement och HttpsTransportBindingElement.

Kodare

Följande kodare tillåts:

MTOM-kodare (Message Transmission Optimization Mechanism) stöds inte.

Säkerhet

Delvis betrodda program kan använda WCF:s säkerhetsfunktioner på transportnivå för att skydda kommunikationen. Säkerhet på meddelandenivå stöds inte. Att konfigurera en bindning för att använda säkerhet på meddelandenivå resulterar i ett undantag vid körning.

Bindningar som inte stöds

Bindningar som använder tillförlitliga meddelanden, transaktioner eller säkerhet på meddelandenivå stöds inte.

Serialisering

DataContractSerializer Både och XmlSerializer stöds i en partiell förtroendemiljö. Användning av DataContractSerializer är dock föremål för följande villkor:

  • Alla serialiserbara [DataContract] typer måste vara public.

  • Alla serialiserbara [DataMember] fält eller egenskaper i en [DataContract] typ måste vara offentliga och läsa/skriva. Serialisering och deserialisering av readonly fält stöds inte när WCF körs i ett delvis betrott program.

  • Programmeringsmodellen [Serializable]/ISerializable stöds inte i en partiell förtroendemiljö.

  • Kända typer måste anges i kod- eller datornivåkonfigurationen (machine.config). Kända typer kan inte anges i konfiguration på programnivå av säkerhetsskäl.

  • Typer som implementerar IObjectReference utlöser ett undantag i en delvis betrodd miljö.

Mer information om säkerhet när du använder DataContractSerializer säkert i ett delvis betrott program finns i avsnittet Serialisering i Metodtips för partiellt förtroende.

Samlingstyper

Vissa samlingstyper implementerar både IEnumerable<T> och IEnumerable. Exempel är typer som implementerar ICollection<T>. Sådana typer kan implementera en public implementering av GetEnumerator(), och en explicit implementering av GetEnumerator(). I det här fallet DataContractSerializer anropar implementeringen public av GetEnumerator(), och inte den uttryckliga implementeringen av GetEnumerator(). Om ingen av GetEnumerator() implementeringarna är public och alla är explicita implementeringar anropar IEnumerable.GetEnumerator()du DataContractSerializer .

För samlingstyper när WCF körs i en partiell förtroendemiljö, om ingen av GetEnumerator() implementeringarna är public, eller om ingen av dem är explicita gränssnittsimplementeringar, genereras ett säkerhetsfel.

NetDataContractSerializer

Många .NET Framework-samlingstyper som List<T>, Dictionary<TKey,TValue> ArrayListoch Hashtable stöds inte av NetDataContractSerializer delvis förtroende. Dessa typer har attributuppsättningen [Serializable] , och som tidigare angavs i avsnittet Serialisering stöds inte det här attributet i partiellt förtroende. Behandlar DataContractSerializer samlingar på ett speciellt sätt och kan därmed komma runt denna begränsning, men NetDataContractSerializer har ingen sådan mekanism för att kringgå denna begränsning.

Typen DateTimeOffset stöds inte av det NetDataContractSerializer partiella förtroendet.

En surrogat kan inte användas med NetDataContractSerializer (med hjälp av mekanismen SurrogateSelector ) när den körs i partiellt förtroende. Observera att den här begränsningen gäller för användning av surrogat, inte serialisering av den.

Aktivera vanliga beteenden för körning

Tjänst- eller slutpunktsbeteenden som inte har markerats med AllowPartiallyTrustedCallersAttribute attributet (APTCA) som läggs till i< avsnittet commonBehaviors i en konfigurationsfil> körs inte när programmet körs i en partiell förtroendemiljö och inget undantag utlöses när detta inträffar. Om du vill framtvinga körning av vanliga beteenden måste du göra något av följande:

  • Markera ditt vanliga beteende med AllowPartiallyTrustedCallersAttribute attributet så att det kan köras när det distribueras som ett program med delvis förtroende. Observera att en registerpost kan ställas in på datorn för att förhindra att APTCA-markerade sammansättningar körs. .

  • Kontrollera att om programmet distribueras som ett fullständigt betrott program kan användarna inte ändra säkerhetsinställningarna för kodåtkomst för att köra programmet i en partiell förtroendemiljö. Om de kan göra det körs inte beteendet och inget undantag genereras. Se alternativet levelfinal med Caspol.exe (Code Access Security Policy Tool) för att säkerställa detta.

Ett exempel på ett vanligt beteende finns i How to: Lock Down Endpoints in the Enterprise (Så här gör du: Lås slutpunkter i Enterprise).

Konfiguration

Med ett undantag kan delvis betrodd kod bara läsa in WCF-konfigurationsavsnitt i den lokala app.config filen. För att läsa in WCF-konfigurationsavsnitt som refererar till WCF-avsnitt i machine.config eller i en rotwebb.config-fil krävs ConfigurationPermission(Unrestricted). Utan den här behörigheten resulterar referenser till WCF-konfigurationsavsnitt (beteenden, bindningar) utanför den lokala konfigurationsfilen till ett undantag när konfigurationen läses in.

Det enda undantaget är konfiguration av känd typ för serialisering, enligt beskrivningen i avsnittet Serialisering i det här avsnittet.

Viktigt!

Konfigurationstillägg stöds endast när de körs under Fullständigt förtroende.

Diagnostik

Händelseloggning

Begränsad händelseloggning stöds under partiellt förtroende. Endast tjänstaktiveringsfel och spårnings-/meddelandeloggningsfel loggas i händelseloggen. Det maximala antalet händelser som kan loggas av en process är 5, för att undvika att skriva överdrivna meddelanden till händelseloggen.

Meddelandeloggning

Meddelandeloggning fungerar inte när WCF körs i en partiell förtroendemiljö. Om det är aktiverat under partiellt förtroende misslyckas inte tjänstaktiveringen, men inget meddelande loggas.

Spårning

Begränsade spårningsfunktioner är tillgängliga när de körs i en partiell förtroendemiljö. I -elementet <listeners> i konfigurationsfilen är TextWriterTraceListener de enda typerna som du kan lägga till och den nya EventSchemaTraceListener. Användning av standarden XmlWriterTraceListener kan resultera i ofullständiga eller felaktiga loggar.

Spårningskällor som stöds är:

Följande spårningskällor stöds inte:

Följande medlemmar i TraceOptions uppräkningen bör inte anges:

När du använder spårning i en partiell förtroendemiljö kontrollerar du att programmet har tillräcklig behörighet för att lagra utdata från spårningslyssnaren. När du till exempel använder TextWriterTraceListener för att skriva spårningsutdata till en textfil kontrollerar du att programmet har den nödvändiga FileIOPermission som krävs för att kunna skriva till spårningsfilen.

Kommentar

För att undvika att överbelasta spårningsfilerna med duplicerade fel inaktiverar WCF spårning av resursen eller åtgärden efter det första säkerhetsfelet. Det finns en undantagsspårning för varje misslyckad resursåtkomst, första gången ett försök görs att komma åt resursen eller utföra åtgärden.

WCF-tjänstvärd

WCF-tjänstvärden stöder inte partiellt förtroende. Om du vill använda en WCF-tjänst i partiellt förtroende ska du inte använda projektmallen WCF-tjänstbibliotek i Visual Studio för att skapa tjänsten. Skapa i stället en ny webbplats i Visual Studio genom att välja webbmallen för WCF-tjänsten, som kan vara värd för tjänsten på en webbserver där delvis förtroende för WCF stöds.

Andra begränsningar

WCF är vanligtvis begränsat till de säkerhetsöverväganden som åläggs det av värdprogrammet. Om WCF till exempel finns i ett XAML-webbläsarprogram (XBAP) omfattas det av XBAP-begränsningar, enligt beskrivningen i Windows Presentation Foundation Partial Trust Security.

Följande ytterligare funktioner är inte aktiverade när du kör indigo2 i en partiell förtroendemiljö:

  • Windows Management Instrumentation (WMI)

  • Händelseloggning är endast delvis aktiverad (se diskussion i avsnittet Diagnostik ).

  • Prestandaräknare

Användning av WCF-funktioner som inte stöds i en partiell förtroendemiljö kan resultera i undantag vid körning.

Olistade funktioner

Det bästa sättet att upptäcka att en del av informationen eller åtgärden inte är tillgänglig när den körs i en partiell förtroendemiljö är att försöka komma åt resursen eller utföra åtgärden i ett try block och sedan catch felet. För att undvika att överbelasta spårningsfilerna med duplicerade fel inaktiverar WCF spårning av resursen eller åtgärden efter det första säkerhetsfelet. Det finns en undantagsspårning för varje misslyckad resursåtkomst, första gången ett försök görs att komma åt resursen eller utföra åtgärden.

Se även