Sdílet prostřednictvím


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ýt public a mít public konstruktor. Pokud definuje [OperationContract] metody, musí to být public. Pokud místo toho implementuje [ServiceContract] rozhraní, tyto implementace metody mohou být explicitní nebo private, za předpokladu [ServiceContract] , že rozhraní je public.

  • Při použití atributu [ServiceKnownType] musí být publiczadaná metoda .

  • [MessageContract] třídy a jejich členy mohou být public. [MessageContract] Pokud je třída definována v sestavení aplikace, může být internal a mít internal č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é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ýt public.

  • Všechna serializovatelná [DataMember] pole nebo vlastnosti typu [DataContract] musí být veřejná a pro čtení a zápis. Serializace a deserializace readonly 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 publicnebo žá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:

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.

Viz také