Kompatibilita funkcí s částečnou důvěryhodností
Technologie Windows Communication Foundation (WCF) podporuje omezenou podmnožinu funkcí při spuštění v částečně důvěryhodném prostředí. Funkce podporované v částečném vztahu důvěryhodnosti jsou navržené podle konkrétní sady scénářů, jak je popsáno v tématu Podporované scénáře nasazení.
Minimální požadavky na oprávnění
WCF podporuje podmnožinu funkcí v aplikacích spuštěných v některé z následujících standardních pojmenovaných sad oprávnění:
Oprávnění střední důvěryhodnosti
Oprávnění zóny internetu
Pokus o použití WCF v částečně důvěryhodných aplikacích s více omezujícími oprávněními může vést k výjimkám zabezpečení za běhu.
Smlouvy
Při spouštění pod částečným vztahem důvěryhodnosti podléhají kontraktům následující omezení:
Třída služby, která implementuje
[ServiceContract]
rozhraní, musí býtpublic
a mítpublic
konstruktor. Pokud definuje[OperationContract]
metody, musí to býtpublic
. Pokud místo toho implementuje[ServiceContract]
rozhraní, tyto implementace metody mohou být explicitní neboprivate
, za předpokladu[ServiceContract]
, že rozhraní jepublic
.Při použití atributu
[ServiceKnownType]
musí býtpublic
zadaná metoda .[MessageContract]
třídy a jejich členy mohou býtpublic
.[MessageContract]
Pokud je třída definována v sestavení aplikace, může býtinternal
a mítinternal
členy.
Vazby poskytované systémem
Prostředí s částečnou důvěryhodností je BasicHttpBinding WebHttpBinding plně podporováno. Podporuje WSHttpBinding se pouze režim zabezpečení přenosu.
Vazby, které používají přenosy jiné než HTTP, jako NetTcpBindingje například , the NetNamedPipeBinding, nebo the NetMsmqBinding, nejsou podporovány při spuštění v prostředí částečné důvěryhodnosti.
Vlastní vazby
Vlastní vazby je možné vytvořit a použít v prostředí s částečnou důvěryhodností, ale musí dodržovat omezení uvedená v této části.
Přenosy
Jediné povolené prvky přenosové vazby jsou HttpTransportBindingElement a HttpsTransportBindingElement.
Enkodéry
Jsou povoleny následující kodéry:
Kodér textu (TextMessageEncodingBindingElement).
Binární kodér (BinaryMessageEncodingBindingElement).
Kodér webových zpráv (WebMessageEncodingBindingElement).
Kodéry MTOM (Message Transmission Optimization Mechanism) nejsou podporovány.
Zabezpečení
Částečně důvěryhodné aplikace můžou k zabezpečení komunikace používat funkce zabezpečení na úrovni přenosu WCF. Zabezpečení na úrovni zpráv není podporováno. Konfigurace vazby tak, aby používala zabezpečení na úrovni zpráv, způsobí výjimku za běhu.
Nepodporované vazby
Vazby, které používají spolehlivé zasílání zpráv, transakce nebo zabezpečení na úrovni zpráv, nejsou podporovány.
Serializace
Obě DataContractSerializer možnosti jsou XmlSerializer podporovány v prostředí s částečnou důvěryhodností. Použití je DataContractSerializer však podmíněno následujícími podmínkami:
Všechny serializovatelné
[DataContract]
typy musí býtpublic
.Všechna serializovatelná
[DataMember]
pole nebo vlastnosti typu[DataContract]
musí být veřejná a pro čtení a zápis. Serializace a deserializacereadonly
polí není podporována při spuštění WCF v částečně důvěryhodné aplikaci.Programovací
[Serializable]
model /ISerializable není podporován v prostředí částečné důvěryhodnosti.Známé typy musí být zadány v konfiguraci na úrovni kódu nebo počítače (machine.config). Známé typy nelze zadat v konfiguraci na úrovni aplikace z bezpečnostních důvodů.
Typy, které implementují IObjectReference výjimku v částečně důvěryhodném prostředí.
Další informace o zabezpečení při bezpečném použití DataContractSerializer v částečně důvěryhodné aplikaci najdete v části Serializace v části Osvědčené postupy částečné důvěryhodnosti.
Typy kolekcí
Některé typy kolekcí implementují oba IEnumerable<T> a IEnumerable. Příklady zahrnují typy, které implementují ICollection<T>. Takové typy mohou implementovat public
implementaci GetEnumerator()
a explicitní implementaci GetEnumerator()
. V tomto případě DataContractSerializer vyvolá implementaci public
GetEnumerator()
, a nikoli explicitní provádění .GetEnumerator()
Pokud žádná z GetEnumerator()
implementací není public
a všechny jsou explicitní implementace, pak DataContractSerializer vyvolá IEnumerable.GetEnumerator()
.
Pro typy kolekcí, když WCF běží v částečném důvěryhodném prostředí, pokud žádná z GetEnumerator()
implementací nejsou public
nebo žádné z nich nejsou explicitní implementace rozhraní, je vyvolán výjimka zabezpečení.
NetDataContractSerializer
Mnoho typů kolekcí rozhraní .NET Framework, jako List<T>je například , ArrayListDictionary<TKey,TValue> a Hashtable nejsou podporovány částečným vztahem NetDataContractSerializer důvěryhodnosti. Tyto typy mají [Serializable]
sadu atributů a jak bylo uvedeno dříve v části Serializace, tento atribut není podporován v částečné důvěryhodnosti. Zachází DataContractSerializer se se kolekcemi zvláštním způsobem a je tak schopen toto omezení obejít, ale NetDataContractSerializer nemá žádný takový mechanismus, jak toto omezení obejít.
Typ DateTimeOffset není podporován částečným vztahem důvěryhodnosti NetDataContractSerializer .
Náhradní náhradu NetDataContractSerializer nelze použít s (pomocí SurrogateSelector mechanismu) při spuštění v částečném vztahu důvěryhodnosti. Všimněte si, že toto omezení platí pro použití náhradní, nikoli serializace.
Povolení běžného chování ke spuštění
Chování služby nebo koncového bodu není označené atributem AllowPartiallyTrustedCallersAttribute (APTCA), které jsou přidány do <části commonBehaviors> konfiguračního souboru, se nespustí, když se aplikace spustí v prostředí s částečnou důvěryhodností a v takovém případě se nevyvolá žádná výjimka. Pokud chcete vynutit spouštění běžných chování, musíte provést jednu z následujících možností:
Označte běžné chování atributem AllowPartiallyTrustedCallersAttribute , aby se mohlo spustit při nasazení jako aplikace s částečnou důvěryhodností. Všimněte si, že položku registru lze nastavit v počítači, aby se zabránilo spuštění sestavení označených aptca. .
Ujistěte se, že pokud je aplikace nasazená jako plně důvěryhodná aplikace, kterou uživatelé nemohou upravit nastavení zabezpečení přístupu kódu tak, aby aplikaci spouštěla v prostředí s částečnou důvěryhodností. Pokud je to možné, chování se nespustí a nevyvolá se žádná výjimka. Pokud to chcete zajistit, podívejte se na možnost levelfinal pomocí Caspol.exe (Nástroj zásad zabezpečení přístupu kódu).
Příklad běžného chování najdete v tématu Postupy: Uzamčení koncových bodů v podniku.
Konfigurace
S jednou výjimkou může částečně důvěryhodný kód načíst pouze oddíly konfigurace WCF v místním app.config
souboru. Pokud chcete načíst konfigurační oddíly WCF odkazované na oddíly WCF v souboru machine.config nebo v kořenovém souboru web.config, vyžaduje ConfigurationPermission (Unrestricted). Bez tohoto oprávnění odkazy na oddíly konfigurace WCF (chování, vazby) mimo místní konfigurační soubor způsobí výjimku při načtení konfigurace.
Jedinou výjimkou je konfigurace známého typu pro serializaci, jak je popsáno v části Serializace tohoto tématu.
Důležité
Rozšíření konfigurace se podporují pouze při spuštění v rámci úplného vztahu důvěryhodnosti.
Diagnostika
Protokolování událostí
Omezené protokolování událostí je podporováno v rámci částečného vztahu důvěryhodnosti. Do protokolu událostí se protokolují pouze chyby aktivace služby a chyby trasování/protokolování zpráv. Maximální počet událostí, které lze protokolovat procesem, je 5, aby se zabránilo zápisu nadměrných zpráv do protokolu událostí.
Protokolování zpráv
Protokolování zpráv nefunguje při spuštění WCF v prostředí s částečnou důvěryhodností. Pokud je tato možnost povolená v rámci částečné důvěryhodnosti, aktivace služby se nezdaří, ale nezaprotokoluje se žádná zpráva.
Sledování
Funkce omezeného trasování je dostupná při spuštění v prostředí s částečnou důvěryhodností. V elementu v konfiguračním <listeners>
souboru jsou jedinými typy, které můžete přidat TextWriterTraceListener , a nové EventSchemaTraceListener. Použití standardu XmlWriterTraceListener může vést k neúplným nebo nesprávným protokolům.
Podporované zdroje trasování jsou:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors a System.IdentityModel.Tokens.
Následující zdroje trasování nejsou podporovány:
Následující členy výčtu TraceOptions by neměly být zadány:
Pokud používáte trasování v částečném důvěryhodném prostředí, ujistěte se, že aplikace má dostatečná oprávnění k uložení výstupu naslouchacího procesu trasování. Například při použití TextWriterTraceListener výstupu trasování k zápisu do textového souboru se ujistěte, že aplikace má nezbytné FileIOPermission potřebné k úspěšnému zápisu do trasovacího souboru.
Poznámka:
Aby se zabránilo zahltit trasovacím souborům duplicitními chybami, WCF zakáže trasování prostředku nebo akce po prvním selhání zabezpečení. Pro každý neúspěšný přístup k prostředku existuje jedno trasování výjimek, při prvním pokusu o přístup k prostředku nebo provedení akce.
Hostitel služby WCF
Hostitel služby WCF nepodporuje částečný vztah důvěryhodnosti. Pokud chcete použít službu WCF v částečném vztahu důvěryhodnosti, nepoužívejte šablonu projektu knihovny služeb WCF v sadě Visual Studio k sestavení služby. Místo toho vytvořte nový web v sadě Visual Studio výběrem šablony webu služby WCF, která může hostovat službu na webovém serveru, na kterém je podporována částečná důvěryhodnost WCF.
Další omezení
SLUŽBA WCF je obecně omezena na aspekty zabezpečení, které na ni hostitelská aplikace uložila. Pokud je například WCF hostovaný v aplikaci prohlížeče XAML (XBAP), podléhá omezením XBAP, jak je popsáno v části Windows Presentation Foundation Částečné zabezpečení důvěryhodnosti.
Následující další funkce nejsou povoleny při spuštění indigo2 v částečném důvěryhodném prostředí:
Rozhraní Windows Management Instrumentation (WMI)
Protokolování událostí je povolené jenom částečně (viz diskuze v části Diagnostika ).
Čítače výkonu
Použití funkcí WCF, které nejsou podporovány v prostředí částečné důvěryhodnosti, může vést k výjimkám za běhu.
Nezasílané funkce
Nejlepší způsob, jak zjistit, že část informací nebo akce není k dispozici při spuštění v částečném důvěryhodném prostředí, je pokus o přístup k prostředku nebo provedení akce uvnitř try
bloku a následné catch
selhání. Aby se zabránilo zahltit trasovacím souborům duplicitními chybami, WCF zakáže trasování prostředku nebo akce po prvním selhání zabezpečení. Pro každý neúspěšný přístup k prostředku existuje jedno trasování výjimek, při prvním pokusu o přístup k prostředku nebo provedení akce.