Gambaran Umum Model Pemrograman HTTP Web WCF
Model pemrograman HTTP Windows Communication Foundation (WCF) menyediakan elemen dasar yang diperlukan untuk membangun layanan HTTP WEB dengan WCF. Layanan HTTP dirancang untuk diakses oleh berbagai klien yang mungkin, termasuk browser Web dan memiliki persyaratan unik berikut:
URI dan Pemrosesan URI URI memiliki peran penting dalam desain layanan HTTP WEB. Model pemrograman HTTP WEB WCF menggunakan kelas UriTemplate dan UriTemplateTable untuk menyediakan kemampuan pemrosesan URI.
Dukungan untuk operasi GET dan POST Layanan HTTP WEB memanfaatkan kata kerja GET untuk pengambilan data, selain berbagai kata kerja pemanggilan untuk modifikasi data dan pemanggilan jarak jauh. Model pemrograman HTTP WEB WCF menggunakan WebGetAttribute dan WebInvokeAttribute untuk mengaitkan operasi layanan dengan kata kerja GET dan kata kerja HTTP lainnya seperti PUT, POST, dan DELETE.
Beberapa format data Layanan gaya data memproses banyak jenis data selain pesan SOAP. Model pemrograman HTTP WEB WCF menggunakan WebHttpBinding dan WebHttpBehavior untuk mendukung berbagai format data termasuk dokumen XML, objek data JSON, dan aliran konten biner seperti gambar, file video, atau teks biasa.
Model pemrograman HTTP WCF WEB memperluas jangkauan WCF untuk mencakup skenario gaya Web yang mencakup layanan HTTP WEB, layanan AJAX dan JSON, dan umpan Sindikasi (ATOM/RSS). Untuk informasi selengkapnya tentang layanan AJAX dan JSON, lihat Integrasi AJAX dan Dukungan JSON. Untuk informasi selengkapnya tentang Sindikasi, lihat Gambaran Umum Sindikasi WCF.
Tidak ada batasan tambahan pada jenis data yang dapat ditampilkan dari layanan HTTP WEB. Setiap jenis yang dapat diserialisasi bisa ditampilkan dari operasi layanan HTTP WEB. Karena operasi layanan HTTP dapat dipanggil oleh browser web, ada batasan pada jenis data apa yang dapat ditentukan dalam URL. Untuk informasi selengkapnya tentang jenis apa yang didukung secara default, lihat bagian URL dan Parameter String Kueri UriTemplate di bawah ini. Perilaku default dapat diubah dengan menyediakan implementasi T:System.ServiceModel.Dispatcher.QueryStringConverter Anda sendiri yang menentukan cara mengonversi parameter yang ditentukan dalam URL ke jenis parameter aktual. Untuk informasi selengkapnya, lihat QueryStringConverter
Perhatian
Layanan yang ditulis dengan model pemrograman HTTP WCF WEB tidak menggunakan pesan SOAP. Karena SOAP tidak digunakan, fitur keamanan yang disediakan oleh WCF tidak dapat digunakan. Namun, Anda dapat menggunakan keamanan berbasis transportasi dengan menghosting layanan dengan HTTPS. Untuk informasi selengkapnya tentang keamanan WCF, lihat Gambaran Umum Keamanan
Peringatan
Menginstal ekstensi WebDAV untuk IIS dapat menyebabkan layanan HTTP Web menampilkan kesalahan HTTP 405 saat ekstensi WebDAV mencoba menangani semua permintaan PUT. Untuk mengatasi masalah ini, Anda dapat menghapus instalan ekstensi WebDAV atau menonaktifkan ekstensi WebDAV untuk situs Anda. Untuk informasi selengkapnya, lihat IIS and WebDav
Pemrosesan URI dengan UriTemplate dan UriTemplateTable
Template URI menyediakan sintaksis yang efisien untuk mengekspresikan kumpulan URI besar yang serupa secara struktural. Misalnya, template berikut menunjukkan sekumpulan URI tiga segmen yang dimulai dengan "a" dan diakhiri dengan "c" tanpa mempertimbangkan nilai segmen perantara: a/{segment}/c
Template ini menjelaskan URI seperti berikut:
a/x/c
a/y/c
a/z/c
dan lain sebagainya.
Dalam template ini, notasi kurung kurawal ("{segment}") menunjukkan segmen variabel, bukan nilai harfiah.
.NET Framework menyediakan API untuk bekerja dengan template URI yang disebut UriTemplate. UriTemplates
memungkinkan Anda melakukan hal berikut:
Anda dapat memanggil salah satu metode
Bind
dengan sekumpulan parameter untuk menghasilkan URI tertutup sepenuhnya yang cocok dengan template. Artinya, semua variabel dalam template URI diganti dengan nilai aktual.Anda dapat memanggil
Match
() dengan URI kandidat, yang menggunakan template untuk membagi URI kandidat menjadi bagian konstituennya dan menampilkan kamus yang berisi berbagai bagian URI yang dilabeli sesuai dengan variabel dalam template.Bind
() danMatch
() adalah inversi, sehingga Anda dapat memanggilMatch
(Bind
( x ) ) dan kembali dengan lingkungan yang sama dengan yang Anda mulai.
Sering kali, (terutama di server, di mana mengirimkan permintaan ke operasi layanan berdasarkan URI diperlukan) Anda ingin melacak dari sekumpulan objek UriTemplate dalam struktur data yang dapat mengelola setiap template yang terkandung secara independen. UriTemplateTable merepresentasikan sekumpulan template dan memilih pencocokan terbaik berdasarkan sekumpulan template dan URI kandidat. Hal ini tidak berafiliasi dengan tumpukan jaringan tertentu (termasuk WCF) sehingga Anda dapat menggunakannya di mana pun diperlukan.
Model Layanan WCF memanfaatkan UriTemplate dan UriTemplateTable untuk mengaitkan operasi layanan dengan sekumpulan URI yang dideskripsikan oleh UriTemplate. Operasi layanan dikaitkan dengan UriTemplate, menggunakan WebGetAttribute atau WebInvokeAttribute. Untuk informasi selengkapnya tentang UriTemplate dan UriTemplateTable, lihat UriTemplate dan UriTemplateTable
Atribut WebGet dan WebInvoke
Layanan HTTP WEB WCF menggunakan kata kerja pengambilan (misalnya HTTP GET) di samping berbagai kata kerja pemanggilan (misalnya, HTTP POST, PUT, dan DELETE). Model pemrograman HTTP WEB WCF memungkinkan pengembang layanan mengontrol template URI dan kata kerja yang terkait dengan operasi layanan mereka dengan WebGetAttribute dan WebInvokeAttribute. WebGetAttribute dan WebInvokeAttribute memungkinkan Anda mengontrol cara setiap operasi terikat ke URI dan metode HTTP yang terkait dengan URI tersebut. Misalnya, menambahkan WebGetAttribute dan WebInvokeAttribute dalam kode berikut.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Kode sebelumnya memungkinkan Anda membuat permintaan HTTP berikut.
GET /GetCustomer
POST /UpdateCustomerName
WebInvokeAttribute ditetapkan secara default ke POST tetapi Anda juga dapat menggunakannya untuk kata kerja lainnya.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It" -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Untuk melihat sampel lengkap layanan WCF yang menggunakan model pemrograman HTTP WEB WCF, lihat Cara: Membuat Layanan HTTP Web WCF Dasar
URL dan Parameter String Kueri UriTemplate
Layanan gaya web dapat dipanggil dari browser Web dengan mengetik URL yang terkait dengan operasi layanan. Operasi layanan ini dapat mengambil parameter string kueri yang harus ditentukan dalam formulir string dalam URL. Tabel berikut menunjukkan jenis yang dapat diteruskan dalam URL dan format yang digunakan.
Jenis | Format |
---|---|
Byte | 0 - 255 |
SByte | -128 - 127 |
Int16 | -32768 - 32767 |
Int32 | -2,147,483,648 - 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
UInt16 | 0 - 65535 |
UInt32 | 0 - 4,294,967,295 |
UInt64 | 0 - 18,446,744,073,709,551,615 |
Single | -3.402823e38 - 3.402823e38 (notasi eksponen tidak diperlukan) |
Double | -1.79769313486232e308 - 1.79769313486232e308 (notasi eksponen tidak diperlukan) |
Char | Setiap karakter tunggal |
Decimal | Desimal apa pun dalam notasi standar (tidak ada eksponen) |
Boolean | True atau False (tidak peka dengan huruf besar-kecil) |
String | String apa pun (string nol tidak didukung dan tidak ada pelepasan yang dilakukan) |
DateTime | DD/MM/YYYY MM/DD/YYYY HH:MM:SS [AM| PM] Tahun Hari Bulan Bulan Hari Tahun HH:MM:SS [AM| PM] |
TimeSpan | DD.HH:MM:SS Di mana DD = Hari, HH = Jam, MM = menit, SS = Detik |
Guid | GUID, misalnya: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
DateTimeOffset | DD/MM/YYYY HH:MM:SS MM:SS Di mana DD = Hari, HH = Jam, MM = menit, SS = Detik |
Enumerasi | Nilai enumerasi misalnya, yang mendefinisikan enumerasi seperti yang ditunjukkan dalam kode berikut.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Salah satu nilai enumerasi tertentu (atau nilai bilangan bulat yang sesuai) dapat ditentukan dalam string kueri. |
Jenis yang memiliki TypeConverterAttribute yang dapat mengonversi jenis ke dan dari representasi string. |
Bergantung pada Pengonversi Jenis. |
Format dan Model Pemrograman HTTP WEB WCF
Model pemrograman HTTP WCF WEB memiliki fitur baru untuk menggunakan berbagai format data. Pada lapisan pengikatan, WebHttpBinding dapat membaca dan menulis berbagai jenis data berikut:
XML
JSON
Aliran biner buram
Artinya, model pemrograman HTTP WEB WCF dapat menangani jenis data apa pun, tetapi Anda mungkin memprogram Stream.
.NET Framework 3.5 menyediakan dukungan untuk data JSON (AJAX) serta umpan Sindikasi (termasuk ATOM dan RSS). Untuk informasi selengkapnya tentang fitur-fitur ini, lihat Pemformatan HTTP Web WCF, Gambaran Umum Sindikasi WCF, dan Integrasi AJAX dan Dukungan JSON.
Keamanan dan Model Pemrograman HTTP WEB WCF
Karena model pemrograman HTTP WEB WCF tidak mendukung protokol WS-*, satu-satunya cara untuk mengamankan layanan HTTP WEB WCF adalah dengan mengekspos layanan melalui HTTPS menggunakan SSL. Untuk informasi selengkapnya tentang menyiapkan SSL dengan IIS 7.0, lihat Cara menerapkan SSL dalam IIS.
Memecahkan masalah Model Pemrograman HTTP WEB WCF
Saat memanggil layanan HTTP WEB WCF menggunakan ChannelFactoryBase<TChannel> untuk membuat saluran, WebHttpBehavior menggunakan set EndpointAddress dalam file konfigurasi bahkan jika EndpointAddress yang berbeda diteruskan ke ChannelFactoryBase<TChannel>.