Kompatibilitas Fitur Kepercayaan Parsial
Windows Communication Foundation (WCF) mendukung subset fungsionalitas terbatas saat berjalan di lingkungan yang tepercaya sebagian. Fitur yang didukung dalam kepercayaan parsial dirancang di sekitar serangkaian skenario tertentu seperti yang dijelaskan dalam topik Skenario Penyebaran yang Didukung.
Persyaratan Izin Minimum
WCF mendukung subset fitur dalam aplikasi yang berjalan di bawah salah satu set izin bernama standar berikut:
Izin Kepercayaan Sedang
Izin Zona Internet
Mencoba menggunakan WCF dalam aplikasi yang dipercaya sebagian dengan izin yang lebih ketat dapat mengakibatkan pengecualian keamanan saat runtime.
Kontrak
Kontrak tunduk pada batasan berikut saat berjalan di bawah kepercayaan parsial:
Kelas layanan yang mengimplementasikan antarmuka
[ServiceContract]
harus berupapublic
dan memiliki konstruktorpublic
. Jika mendefinisikan metode[OperationContract]
, ini harus berupapublic
. Jika sebaliknya mengimplementasikan antarmuka[ServiceContract]
, implementasi metode tersebut dapat bersifat eksplisit atauprivate
, asalkan[ServiceContract]
antarmukanya adalahpublic
.Saat menggunakan atribut
[ServiceKnownType]
, metode yang ditentukan harus berupapublic
.Kelas
[MessageContract]
dan anggotanya dapat berupapublic
. Jika kelas[MessageContract]
didefinisikan dalam rakitan aplikasi, kelas dapat berupainternal
dan memilikiinternal
anggota.
Pengikatan yang Disediakan Sistem
BasicHttpBinding dan WebHttpBinding sepenuhnya didukung di lingkungan kepercayaan parsial. WSHttpBinding hanya didukung untuk mode keamanan Transportasi.
Pengikatan yang menggunakan transportasi selain HTTP, seperti NetTcpBinding, NetNamedPipeBinding, atau NetMsmqBinding, tidak didukung saat berjalan di lingkungan kepercayaan parsial.
Pengikatan Khusus
Pengikatan kustom dapat dibuat dan digunakan di lingkungan kepercayaan parsial, tetapi harus mengikuti batasan yang ditentukan di bagian ini.
Transportasi
Satu-satunya elemen pengikatan transportasi yang diizinkan adalah HttpTransportBindingElement dan HttpsTransportBindingElement.
Encoder
Encoder berikut diizinkan:
Encoder teks (TextMessageEncodingBindingElement).
Encoder biner (BinaryMessageEncodingBindingElement).
Encoder Pesan Web (WebMessageEncodingBindingElement).
Encoder Message Transmission Optimization Mechanism (MTOM) tidak didukung.
Keamanan
Aplikasi yang dipercaya sebagian dapat menggunakan fitur keamanan tingkat transportasi WCF untuk mengamankan komunikasi mereka. Keamanan tingkat pesan tidak didukung. Mengonfigurasi pengikatan untuk menggunakan keamanan tingkat pesan menghasilkan pengecualian saat runtime.
Pengikatan yang Tidak Didukung
Pengikatan yang menggunakan pesan, transaksi, atau keamanan tingkat pesan yang andal tidak didukung.
Serialisasi
Baik DataContractSerializer dan XmlSerializer didukung di lingkungan kepercayaan parsial. Namun, penggunaan DataContractSerializer harus mengikuti kondisi berikut:
Semua jenis
[DataContract]
yang dapat diserialisasikan harus bersifatpublic
.Semua bidang atau properti
[DataMember]
yang dapat diserialisasikan dalam jenis[DataContract]
harus bersifat publik dan baca/tulis. Serialisasi dan deserialisasi bidangreadonly
tidak didukung saat menjalankan WCF dalam aplikasi yang tepercaya parsial.Model pemrograman
[Serializable]
/ISerializable tidak didukung di lingkungan kepercayaan parsial.Jenis yang diketahui harus ditentukan dalam kode atau konfigurasi tingkat mesin (machine.config). Jenis yang diketahui tidak dapat ditentukan dalam konfigurasi tingkat aplikasi karena alasan keamanan.
Jenis yang menerapkan IObjectReference membuat pengecualian di lingkungan yang dipercaya sebagian.
Lihat bagian Serialisasi di Praktik Terbaik Kepercayaan Parsial untuk mengetahui informasi selengkapnya tentang keamanan saat menggunakan DataContractSerializer dengan aman dalam aplikasi yang tepercaya sebagian.
Jenis Kumpulan
Beberapa jenis koleksi mengimplementasikan IEnumerable<T> dan IEnumerable. Contohnya termasuk jenis yang mengimplementasikan ICollection<T>. Jenis tersebut dapat mengimplementasikan implementasi public
dari GetEnumerator()
, dan implementasi eksplisit dari GetEnumerator()
. Dalam hal ini, DataContractSerializer memanggil implementasi public
dari GetEnumerator()
, dan bukan implementasi eksplisit dari GetEnumerator()
. Jika tidak ada implementasi GetEnumerator()
yang merupakan public
dan semuanya adalah implementasi eksplisit, DataContractSerializer memanggil IEnumerable.GetEnumerator()
.
Untuk jenis koleksi saat WCF berjalan di lingkungan kepercayaan parsial, jika tidak ada implementasi GetEnumerator()
yang merupakan public
, atau tidak ada yang merupakan implementasi antarmuka eksplisit, pengecualian keamanan dibuat.
NetDataContractSerializer
Banyak .NET Framework jenis koleksi seperti List<T>, ArrayList, Dictionary<TKey,TValue>, dan Hashtable tidak didukung oleh NetDataContractSerializer dalam kepercayaan parsial. Jenis ini memiliki set atribut [Serializable]
, dan seperti yang dinyatakan sebelumnya di bagian Serialisasi, atribut ini tidak didukung dalam kepercayaan parsial. DataContractSerializer memperlakukan koleksi dengan cara khusus dan dengan demikian mampu mengatasi pembatasan ini, tetapi NetDataContractSerializer tidak memiliki mekanisme seperti itu untuk menghindari pembatasan ini.
Jenis DateTimeOffset ini tidak didukung oleh NetDataContractSerializer dalam kepercayaan parsial.
Pengganti tidak dapat digunakan dengan NetDataContractSerializer (menggunakan mekanisme SurrogateSelector) saat berjalan dalam kepercayaan parsial. Perhatikan bahwa pembatasan ini berlaku untuk menggunakan pengganti, bukan untuk menserialisasikannya.
Mengaktifkan Perilaku Umum untuk Dijalankan
Perilaku layanan atau titik akhir yang tidak ditandai dengan atribut AllowPartiallyTrustedCallersAttribute (APTCA) yang ditambahkan ke bagian <commonBehaviors> dari file konfigurasi tidak dijalankan saat aplikasi berjalan di lingkungan kepercayaan parsial, dan tidak ada pengecualian yang dibuat ketika ini terjadi. Untuk memberlakukan menjalankan perilaku umum, Anda harus melakukan salah satu opsi berikut:
Tandai perilaku umum Anda dengan atribut AllowPartiallyTrustedCallersAttribute sehingga dapat berjalan saat disebarkan sebagai aplikasi kepercayaan parsial. Perhatikan bahwa entri registri dapat diatur pada komputer untuk mencegah rakitan yang ditandai APTCA berjalan. .
Pastikan bahwa jika aplikasi disebarkan sebagai aplikasi yang sepenuhnya tepercaya, pengguna tidak dapat mengubah pengaturan keamanan akses kode untuk menjalankan aplikasi di lingkungan kepercayaan parsial. Jika mereka dapat melakukannya, validator kustom tidak berjalan dan tidak ada pengecualian yang dibuat. Untuk memastikan hal ini, lihat opsi levelfinal menggunakan Caspol.exe (Code Access Security Policy Tool).
Untuk contoh perilaku umum, lihat Cara: Mengunci Titik Akhir di Perusahaan.
Konfigurasi
Dengan satu pengecualian, kode yang sebagian tepercaya hanya dapat memuat bagian konfigurasi WCF dalam file app.config
lokal. Untuk memuat bagian konfigurasi WCF yang mereferensikan bagian WCF di machine.config atau dalam file web.config root memerlukan ConfigurationPermission(Unrestricted). Tanpa izin ini, referensi ke bagian konfigurasi WCF (perilaku, pengikatan) di luar file konfigurasi lokal menghasilkan pengecualian saat konfigurasi dimuat.
Satu pengecualian adalah konfigurasi jenis yang diketahui untuk serialisasi, seperti yang dijelaskan di bagian Serialisasi dari topik ini.
Penting
Ekstensi konfigurasi hanya didukung saat berjalan di bawah Kepercayaan Penuh.
Diagnostik
Pencatatan Acara
Pengelogan peristiwa terbatas didukung di bawah kepercayaan parsial. Hanya kesalahan aktivasi layanan dan kegagalan penelusuran/pencatatan pesan yang dicatat ke Log Peristiwa. Jumlah maksimum peristiwa yang dapat dicatat oleh proses adalah 5, untuk menghindari penulisan pesan yang berlebihan ke Log Peristiwa.
Pengelogan Pesan
Pengelogan pesan tidak berfungsi saat WCF dijalankan di lingkungan kepercayaan parsial. Jika diaktifkan di bawah kepercayaan parsial, ini tidak menggagalkan aktivasi layanan, tetapi tidak ada pesan yang dicatat.
Menelusuri
Fungsionalitas pelacakan terbatas tersedia saat berjalan di lingkungan kepercayaan parsial. Di elemen <listeners>
dalam file konfigurasi, satu-satunya jenis yang dapat Anda tambahkan adalah TextWriterTraceListener dan EventSchemaTraceListener yang baru. Penggunaan XmlWriterTraceListener standar dapat mengakibatkan log yang tidak lengkap atau salah.
Sumber pelacakan yang didukung adalah:
System.IdentityModel.Claims, System.IdentityModel.Policy, System.IdentityModel.Selectors, dan System.IdentityModel.Tokens.
Sumber jejak berikut didukung:
Anggota enumerasi TraceOptions berikut tidak boleh ditentukan:
Saat menggunakan pelacakan di lingkungan kepercayaan parsial, pastikan bahwa aplikasi memiliki izin yang memadai untuk menyimpan output pendengar jejak. Misalnya, saat menggunakan TextWriterTraceListener untuk menulis output jejak ke file teks, pastikan bahwa aplikasi memiliki FileIOPermission yang diperlukan agar berhasil menulis ke file jejak.
Catatan
Untuk menghindari membanjiri file pelacakan dengan kesalahan duplikat, WCF menonaktifkan pelacakan sumber daya atau tindakan setelah kegagalan keamanan pertama. Ada satu jejak pengecualian untuk setiap akses sumber daya yang gagal, pertama kali upaya dilakukan untuk mengakses sumber daya atau melakukan tindakan.
WCF Service Host
Host Layanan WCF tidak mendukung Kepercayaan Parsial. Jika Anda ingin menggunakan layanan WCF dalam Kepercayaan Parsial, jangan gunakan templat Proyek Pustaka Layanan WCF di Visual Studio untuk membangun layanan Anda. Sebagai gantinya, buat situs Web baru di Visual Studio dengan memilih templat situs Web layanan WCF, yang dapat menghosting layanan di server Web yang didukung kepercayaan parsial WCF.
Batasan Lainnya
WCF umumnya terbatas pada pertimbangan keamanan yang diberlakukan oleh aplikasi hosting. Misalnya, jika WCF dihosting di Aplikasi Browser XAML (XBAP), WCF tunduk pada batasan XBAP, seperti yang dijelaskan dalam Keamanan Kepercayaan Parsial Windows Presentation Foundation.
Fitur tambahan berikut ini tidak diaktifkan saat menjalankan indigo2 di lingkungan kepercayaan parsial:
Instrumentasi Manajemen Windows (WMI/Windows Management Instrumentation)
Pengelogan peristiwa hanya diaktifkan sebagian (lihat diskusi di bagian Diagnostik).
Penghitung kinerja
Penggunaan fitur WCF yang tidak didukung di lingkungan kepercayaan parsial dapat mengakibatkan pengecualian pada durasi.
Fitur Tidak Tercantum
Cara terbaik untuk menemukan bahwa sepotong informasi atau tindakan tidak tersedia saat berjalan di lingkungan kepercayaan parsial adalah dengan mencoba mengakses sumber daya atau melakukan tindakan di dalam blok try
, dan kemudian catch
kegagalan. Untuk menghindari membanjiri file pelacakan dengan kesalahan duplikat, WCF menonaktifkan pelacakan sumber daya atau tindakan setelah kegagalan keamanan pertama. Ada satu jejak pengecualian untuk setiap akses sumber daya yang gagal, pertama kali upaya dilakukan untuk mengakses sumber daya atau melakukan tindakan.