Penulis: Dflying Chen ( http://dflying.cnblogs.com/ )
Pada postingan sebelumnya (Memanggil Layanan Web di ASP.NET Atlas - Membuat Mashup untuk memanggil Layanan Web jarak jauh (Yahoo! Contoh cuaca)), saya memperkenalkan penggunaan BridgeRestProxy untuk melakukan Mashup di Layanan Web. Namun, dalam perkembangan sebenarnya, metode sederhana ini seringkali tidak cukup. Kita perlu menulis kode program untuk menyelesaikan beberapa logika yang rumit. Artinya, gunakan Kelas Proxy kompleks khusus alih-alih kelas bawaan di Atlas ditambah beberapa tag XML di file asbx. Hari ini kita akan mengambil contoh yang lebih kompleks: Mashup Layanan Pencarian Google untuk belajar menggunakan Kelas khusus untuk memproksi panggilan ke Layanan Web jarak jauh.
Pertama, mari kita lihat layanan yang disediakan oleh Google: Google memberi kami serangkaian API kepada para pengembang, yang dapat Anda lihat di http://api.google.com/ . Untuk API Penelusuran yang akan kami gunakan hari ini, Anda juga dapat mengunjungi http://api.google.com/Ajukan permohonan Kunci Lisensi Google dan sertakan Kunci ini dalam setiap permintaan ke Google. Saya melihat dokumentasi Google, dan dikatakan bahwa setiap Kunci Lisensi hanya mengizinkan 1.000 permintaan per hari. Jika Anda perlu menggunakan Pencarian Google di situs web besar, saya khawatir Anda harus menyiapkan banyak Kunci Lisensi.. Google memang cukup pelit-_-b.
Setelah mengajukan Kunci Lisensi, kita dapat memulai. Tentu saja, jika ini adalah pertama kalinya Anda berhubungan dengan Mashup, Anda mungkin ingin merujuk ke artikel saya ini: Memanggil Layanan Web di ASP.NET Atlas - Membuat Mashup untuk Memanggil Layanan Web Jarak Jauh (dasar-dasar dan contoh sederhana).
Pertama, gunakan alat wsdl.exe yang disertakan dengan Visual Studio untuk menghasilkan kode C# yang memanggil Layanan Web Google berdasarkan alamat wsdlnya:
wsdl.exe http://api.google.com/GoogleSearch.wsdl
akan menghasilkan GoogleSearchService.cs Tambahkan ke direktori App_Code di Situs Web kami. Pada titik ini, kita sebenarnya dapat menggunakan kelas-kelas dalam file ini secara langsung, di antaranya GoogleSearchService.doGoogleSearch() adalah metode yang kita perlukan. Tapi lihatlah kelas berantakan yang dihasilkan secara otomatis ini. Ada banyak metode lain di dalamnya, dan metode doGoogleSearch() juga memerlukan banyak parameter, jadi kita harus membungkus file berantakan ini terlebih dahulu, merangkum dan menyederhanakan pemanggilannya.
Dalam contoh program ini, untuk setiap hasil pencarian, kita hanya perlu mendapatkan kolom Judul, URL, dan Cuplikan. Untuk mengurangi lalu lintas jaringan, kami tidak menggunakan kelas hasil pencarian yang disertakan dengan GoogleSearchService.cs, namun menyesuaikan Kelas SearchResultLite yang hanya berisi konten yang kami perlukan:
kelas publik SearchResultLite
{
string pribadi _title;
Judul string publik
{
dapatkan { kembalikan _judul }
setel { _judul = nilai }
}
string pribadi _url;
Url string publik
{
dapatkan { kembalikan _url }
setel { _url = nilai; }
}
string pribadi _snippet;
Cuplikan string publik
{
dapatkan { kembalikan _cuplikan }
setel { _cuplikan = nilai }
}
Hasil Pencarian Publik()
{
}
public SearchResultLite (judul string, url string, cuplikan string)
{
_judul = judul;
_url = url;
_cuplikan = cuplikan;
}
}
Perhatikan bahwa Kelas SearchResultLite di atas harus memiliki konstruktor default tanpa parameter, dan setiap bidang harus menggunakan atribut, bukan anggota publik, jika tidak, Atlas akan membuat kesalahan selama proses konversi ke objek JavaScript.
Mari kita selesaikan GoogleSearchService.doGoogleSearch():
GoogleSearchWarpper kelas publik
{
publik SearchResultLite[] Pencarian(string lisenceKey, kueri string)
{
GoogleSearchService s = GoogleSearchServicebaru();
Hasil GoogleSearchResult = s.doGoogleSearch(
lisensiKey,
pertanyaan,
0,
10,
PALSU,
"",
PALSU,
"",
"",
""
);
Daftar
foreach (elemen ResultElement di result.resultElements)
{
SearchResultLite resultLite = new SearchResultLite(elem.title, elem.URL, elem.snippet);
resultLites.Tambahkan(resultLite);
}
kembalikan resultLites.ToArray();
}
}
Dengan cara ini, kita hanya memerlukan dua parameter saat memanggil metode Pencarian, dan tidak ada bagian yang berlebihan dalam data yang dikembalikan. Simpan sebagai GoogleSearchWarpper.cs.
Selanjutnya, kita perlu menambahkan Kunci Lisensi yang diterapkan di awal ke file web.config, yang akan digunakan pada langkah selanjutnya:
Mari kita lihat deklarasi file Bridge GoogleSearchBridge.asbx:
Perhatikan bahwa nilai atribut type pada bagian
nilai atribut nilai lisensiKey diatur ke % pengaturan aplikasi: GoogleWebAPILisenceKey %. Ini adalah metode penulisan baru yang diperkenalkan dalam file asbx, yang berarti nilainya akan ditetapkan ke bagian appSettings di web. file config saat runtime adalah nilai GoogleWebAPILisenceKey.
Kueri akan diteruskan dari klien dan mewakili kata kunci kueri.
Pada titik ini, kita dapat mengujinya di halaman Atlas. Tentu saja, langkah pertama adalah menambahkan ScriptManager ke halaman dan referensi ke Bridge di atas:
Tambahkan sepotong HTML untuk memungkinkan pengguna memasukkan kata kunci kueri, memicu kueri, dan menampilkan hasil:
Terakhir, tulis JavaScript dan Anda dapat melihat penggunaan Sys.StringBuilder:
function btnSearch_onclick() {
var tbQuery = Sys.UI.TextBox($("tbQuery"));
Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}
fungsi onSearchComplete(hasil) {
var sbResult = Sys.StringBuilder();
for (var i = 0; i < hasil.panjang; ++i) {
sbResult.append("
sbResult.append("" + hasil[i].Judul + "
");
sbResult.append("" + hasil[i].Url + "
" );
sbResult.append(hasil[i].Cuplikan);
}
$('hasil').innerHTML = sbResult.toString();
}
Contoh program dapat diunduh disini: