Pengantar Layanan Web
Panduan ini menunjukkan cara menggunakan teknologi layanan web yang berbeda. Topik yang dibahas termasuk berkomunikasi dengan layanan REST, layanan SOAP, dan layanan Windows Communication Foundation.
Agar berfungsi dengan benar, banyak aplikasi seluler bergantung pada cloud, sehingga mengintegrasikan layanan web ke dalam aplikasi seluler adalah skenario umum. Platform Xamarin mendukung penggunaan teknologi layanan web yang berbeda, dan mencakup dukungan pihak ketiga dan bawaan untuk menggunakan layanan RESTful, ASMX, dan Windows Communication Foundation (WCF).
Untuk pelanggan yang menggunakan Xamarin.Forms, ada contoh lengkap menggunakan masing-masing teknologi ini dalam dokumentasi Xamarin.Forms Web Services .
Penting
Di iOS 9, App Transport Security (ATS) memberlakukan koneksi aman antara sumber daya internet (seperti server back-end aplikasi) dan aplikasi, sehingga mencegah pengungkapan informasi sensitif yang tidak disengaja. Karena ATS diaktifkan secara default di aplikasi yang dibangun untuk iOS 9, semua koneksi akan tunduk pada persyaratan keamanan ATS. Jika koneksi tidak memenuhi persyaratan ini, koneksi akan gagal dengan pengecualian.
Anda dapat menolak ATS jika tidak dimungkinkan untuk menggunakan HTTPS
protokol dan mengamankan komunikasi untuk sumber daya internet. Ini dapat dicapai dengan memperbarui file Info.plist aplikasi. Untuk informasi selengkapnya, lihat Keamanan Transportasi Aplikasi.
REST
Representational State Transfer (REST) adalah gaya arsitektur untuk membangun layanan web. Permintaan REST dibuat melalui HTTP menggunakan kata kerja HTTP yang sama dengan yang digunakan browser web untuk mengambil halaman web dan mengirim data ke server. Kata kerjanya adalah:
- GET – operasi ini digunakan untuk mengambil data dari layanan web.
- POST – operasi ini digunakan untuk membuat item data baru di layanan web.
- PUT – operasi ini digunakan untuk memperbarui item data di layanan web.
- PATCH – operasi ini digunakan untuk memperbarui item data pada layanan web dengan menjelaskan serangkaian instruksi tentang bagaimana item harus dimodifikasi. Kata kerja ini tidak digunakan dalam aplikasi sampel.
- DELETE – operasi ini digunakan untuk menghapus item data di layanan web.
API layanan web yang mematuhi REST disebut API RESTful, dan didefinisikan menggunakan:
- URI dasar.
- Metode HTTP, seperti GET, POST, PUT, PATCH, atau DELETE.
- Jenis media untuk data, seperti JavaScript Object Notation (JSON).
Kesederhanaan REST telah membantu menjadikannya metode utama untuk mengakses layanan web dalam aplikasi seluler.
Mengkonsumsi Layanan REST
Ada sejumlah pustaka dan kelas yang dapat digunakan untuk menggunakan layanan REST, dan subbagian berikut membahasnya. Untuk informasi selengkapnya tentang menggunakan layanan REST, lihat Menggunakan Layanan Web RESTful.
HttpClient
Pustaka Klien HTTP Microsoft menyediakan HttpClient
kelas , yang digunakan untuk mengirim dan menerima permintaan melalui HTTP. Ini menyediakan fungsionalitas untuk mengirim permintaan HTTP dan menerima respons HTTP dari sumber daya yang diidentifikasi URI. Setiap permintaan dikirim sebagai operasi asinkron. Untuk informasi selengkapnya tentang operasi asinkron, lihat Gambaran Umum Dukungan Asinkron.
Kelas mewakili HttpResponseMessage
pesan respons HTTP yang diterima dari layanan web setelah permintaan HTTP dibuat. Ini berisi informasi tentang respons, termasuk kode status, header, dan isi. Kelas HttpContent
mewakili isi HTTP dan header konten, seperti Content-Type
dan Content-Encoding
. Konten dapat dibaca menggunakan salah ReadAs
satu metode, seperti ReadAsStringAsync
dan ReadAsByteArrayAsync
, tergantung pada format data.
Untuk informasi selengkapnya tentang HttpClient
kelas, lihat Membuat Objek HTTPClient.
HTTPWebRequest
Memanggil layanan web dengan HTTPWebRequest
melibatkan:
- Membuat instans permintaan untuk URI tertentu.
- Mengatur berbagai properti HTTP pada instans permintaan.
- Mengambil
HttpWebResponse
dari permintaan. - Membaca data dari respons.
Misalnya, kode berikut mengambil data dari layanan web Pustaka Kedokteran Nasional AS:
var rxcui = "198440";
var request = HttpWebRequest.Create(string.Format(@"https://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui));
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd();
if(string.IsNullOrWhiteSpace(content)) {
Console.Out.WriteLine("Response contained empty body...");
}
else {
Console.Out.WriteLine("Response Body: \r\n {0}", content);
}
Assert.NotNull(content);
}
}
Contoh di atas membuat HttpWebRequest
yang akan mengembalikan data yang diformat sebagai JSON. Data dikembalikan dalam HttpWebResponse
, dari mana StreamReader
dapat diperoleh untuk membaca data.
RestSharp
Pendekatan lain untuk menggunakan layanan REST adalah menggunakan pustaka RestSharp . RestSharp merangkum permintaan HTTP, termasuk dukungan untuk mengambil hasil baik sebagai konten string mentah atau sebagai objek C# yang dideserialisasi. Misalnya, kode berikut membuat permintaan ke layanan web Pustaka Kedokteran Nasional AS, dan mengambil hasilnya sebagai string berformat JSON:
var request = new RestRequest(string.Format("{0}/allinfo", rxcui));
request.RequestFormat = DataFormat.Json;
var response = Client.Execute(request);
if(string.IsNullOrWhiteSpace(response.Content) || response.StatusCode != System.Net.HttpStatusCode.OK) {
return null;
}
rxTerm = DeserializeRxTerm(response.Content);
DeserializeRxTerm
adalah metode yang akan mengambil string JSON mentah dari RestSharp.RestResponse.Content
properti dan mengonversinya menjadi objek C#. Deserialisasi data yang dikembalikan dari layanan web dibahas nanti dalam artikel ini.
NSUrl Koneksi ion
Selain kelas yang tersedia di pustaka kelas dasar Mono (BCL), seperti HttpWebRequest
, dan pustaka C# pihak ketiga, seperti RestSharp, kelas khusus platform juga tersedia untuk menggunakan layanan web. Misalnya, di iOS, NSUrlConnection
kelas dan NSMutableUrlRequest
dapat digunakan.
Contoh kode berikut menunjukkan cara memanggil layanan web Pustaka Kedokteran Nasional AS menggunakan kelas iOS:
var rxcui = "198440";
var request = new NSMutableUrlRequest(new NSUrl(string.Format("https://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)),
NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20);
request["Accept"] = "application/json";
var connectionDelegate = new RxTermNSURLConnectionDelegate();
var connection = new NSUrlConnection(request, connectionDelegate);
connection.Start();
public class RxTermNSURLConnectionDelegate : NSUrlConnectionDelegate
{
StringBuilder _ResponseBuilder;
public bool IsFinishedLoading { get; set; }
public string ResponseContent { get; set; }
public RxTermNSURLConnectionDelegate()
: base()
{
_ResponseBuilder = new StringBuilder();
}
public override void ReceivedData(NSUrlConnection connection, NSData data)
{
if(data != null) {
_ResponseBuilder.Append(data.ToString());
}
}
public override void FinishedLoading(NSUrlConnection connection)
{
IsFinishedLoading = true;
ResponseContent = _ResponseBuilder.ToString();
}
}
Umumnya, kelas khusus platform untuk menggunakan layanan web harus terbatas pada skenario di mana kode asli sedang di-port ke C#. Jika memungkinkan, kode akses layanan web harus portabel sehingga dapat dibagikan lintas platform.
ServiceStack
Opsi lain untuk memanggil layanan web adalah pustaka Service Stack . Misalnya, kode berikut menunjukkan cara menggunakan metode Service Stack IServiceClient.GetAsync
untuk mengeluarkan permintaan layanan:
client.GetAsync<CustomersResponse>("",
(response) => {
foreach(var c in response.Customers) {
Console.WriteLine(c.CompanyName);
}
},
(response, ex) => {
Console.WriteLine(ex.Message);
});
Penting
Meskipun alat seperti ServiceStack dan RestSharp memudahkan untuk memanggil dan menggunakan layanan REST, terkadang tidak sepele untuk menggunakan XML atau JSON yang tidak sesuai dengan konvensi serialisasi DataContract standar. Jika perlu, panggil permintaan dan tangani serialisasi yang sesuai secara eksplisit menggunakan pustaka ServiceStack.Text yang dibahas di bawah ini.
Mengkonsumsi data restful
Layanan web RESTful biasanya menggunakan pesan JSON untuk mengembalikan data ke klien. JSON adalah format pertukaran data berbasis teks yang menghasilkan payload ringkas, yang menghasilkan pengurangan persyaratan bandwidth saat mengirim data. Di bagian ini, mekanisme untuk menggunakan respons RESTful di JSON dan Plain-Old-XML (POX) akan diperiksa.
System.JSON
Platform Xamarin dikirim dengan dukungan untuk JSON di luar kotak. Dengan menggunakan JsonObject
, hasil dapat diambil seperti yang ditunjukkan dalam contoh kode berikut:
var obj = JsonObject.Parse(json);
var properties = obj["rxtermsProperties"];
term.BrandName = properties["brandName"];
term.DisplayName = properties["displayName"];
term.Synonym = properties["synonym"];
term.FullName = properties["fullName"];
term.FullGenericName = properties["fullGenericName"];
term.Strength = properties["strength"];
Namun, penting untuk diketahui bahwa System.Json
alat memuat keseluruhan data ke dalam memori.
JSON.NET
Pustaka newtonSoft JSON.NET adalah pustaka yang banyak digunakan untuk menserialisasikan dan mendeserialisasi pesan JSON. Contoh kode berikut menunjukkan cara menggunakan JSON.NET untuk mendeserialisasi pesan JSON ke dalam objek C#:
var term = new RxTerm();
var properties = JObject.Parse(json)["rxtermsProperties"];
term.BrandName = properties["brandName"].Value<string>();
term.DisplayName = properties["displayName"].Value<string>();
term.Synonym = properties["synonym"].Value<string>();;
term.FullName = properties["fullName"].Value<string>();;
term.FullGenericName = properties["fullGenericName"].Value<string>();;
term.Strength = properties["strength"].Value<string>();
term.RxCUI = properties["rxcui"].Value<string>();
ServiceStack.Text
ServiceStack.Text adalah pustaka serialisasi JSON yang dirancang untuk bekerja dengan pustaka ServiceStack. Contoh kode berikut menunjukkan cara mengurai ServiceStack.Text.JsonObject
JSON menggunakan :
var result = JsonObject.Parse(json).Object("rxtermsProperties")
.ConvertTo(x => new RxTerm {
BrandName = x.Get("brandName"),
DisplayName = x.Get("displayName"),
Synonym = x.Get("synonym"),
FullName = x.Get("fullName"),
FullGenericName = x.Get("fullGenericName"),
Strength = x.Get("strength"),
RxTermDoseForm = x.Get("rxtermsDoseForm"),
Route = x.Get("route"),
RxCUI = x.Get("rxcui"),
RxNormDoseForm = x.Get("rxnormDoseForm"),
});
System.Xml.Linq
Jika menggunakan layanan web REST berbasis XML, LINQ ke XML dapat digunakan untuk mengurai XML dan mengisi objek C# sebaris, seperti yang ditunjukkan dalam contoh kode berikut:
var doc = XDocument.Parse(xml);
var result = doc.Root.Descendants("rxtermsProperties")
.Select(x=> new RxTerm()
{
BrandName = x.Element("brandName").Value,
DisplayName = x.Element("displayName").Value,
Synonym = x.Element("synonym").Value,
FullName = x.Element("fullName").Value,
FullGenericName = x.Element("fullGenericName").Value,
//bind more here...
RxCUI = x.Element("rxcui").Value,
});
Layanan Web ASP.NET (ASMX)
ASMX menyediakan kemampuan untuk membangun layanan web yang mengirim pesan menggunakan Simple Object Access Protocol (SOAP). SOAP adalah protokol independen platform dan independen bahasa untuk membangun dan mengakses layanan web. Konsumen layanan ASMX tidak perlu tahu apa pun tentang platform, model objek, atau bahasa pemrograman yang digunakan untuk mengimplementasikan layanan. Mereka hanya perlu memahami cara mengirim dan menerima pesan SOAP.
Pesan SOAP adalah dokumen XML yang berisi elemen berikut:
- Elemen akar bernama Amplop yang mengidentifikasi dokumen XML sebagai pesan SOAP.
- Elemen Header opsional yang berisi informasi khusus aplikasi seperti data autentikasi. Jika elemen Header ada, elemen tersebut harus menjadi elemen turunan pertama dari elemen Amplop.
- Elemen Isi yang diperlukan yang berisi pesan SOAP yang ditujukan untuk penerima.
- Elemen Kesalahan opsional yang digunakan untuk menunjukkan pesan kesalahan. Jika elemen Kesalahan ada, elemen tersebut harus merupakan elemen turunan dari elemen Isi.
SOAP dapat beroperasi melalui banyak protokol transportasi, termasuk HTTP, SMTP, TCP, dan UDP. Namun, layanan ASMX hanya dapat beroperasi melalui HTTP. Platform Xamarin mendukung implementasi SOAP 1.1 standar melalui HTTP, dan ini termasuk dukungan untuk banyak konfigurasi layanan ASMX standar.
Membuat Proksi
Proksi harus dibuat untuk menggunakan layanan ASMX, yang memungkinkan aplikasi untuk terhubung ke layanan. Proksi dibangun dengan menggunakan metadata layanan yang menentukan metode dan konfigurasi layanan terkait. Metadata ini diekspos sebagai dokumen Web Services Description Language (WSDL) yang dihasilkan oleh layanan web. Proksi dibuat dengan menggunakan Visual Studio untuk Mac atau Visual Studio untuk menambahkan referensi web untuk layanan web ke proyek khusus platform.
URL layanan web dapat menjadi sumber jarak jauh yang dihosting atau sumber daya sistem file lokal yang dapat diakses melalui awalan file:///
jalur, misalnya:
file:///Users/myUserName/projects/MyProjectName/service.wsdl
Ini menghasilkan proksi di folder Referensi Web atau Layanan proyek. Karena kode proksi dihasilkan, proksi tidak boleh dimodifikasi.
Menambahkan Proksi secara Manual ke Proyek
Jika Anda memiliki proksi yang sudah ada yang telah dibuat menggunakan alat yang kompatibel, output ini dapat digunakan saat disertakan sebagai bagian dari proyek Anda. Di Visual Studio untuk Mac, gunakan opsi menu Tambahkan file... untuk menambahkan proksi. Selain itu, ini mengharuskan System.Web.Services.dll dirujuk secara eksplisit menggunakan dialog Tambahkan Referensi... .
Mengonsumsi Proksi
Kelas proksi yang dihasilkan menyediakan metode untuk menggunakan layanan web yang menggunakan pola desain Model Pemrograman Asinkron (APM). Dalam pola ini, operasi asinkron diimplementasikan sebagai dua metode bernama BeginOperationName dan EndOperationName, yang memulai dan mengakhiri operasi asinkron.
Metode BeginOperationName memulai operasi asinkron dan mengembalikan objek yang mengimplementasikan IAsyncResult
antarmuka. Setelah memanggil BeginOperationName, aplikasi dapat terus menjalankan instruksi pada utas panggilan, sementara operasi asinkron terjadi pada utas kumpulan utas.
Untuk setiap panggilan ke BeginOperationName, aplikasi juga harus memanggil EndOperationName untuk mendapatkan hasil operasi. Nilai pengembalian EndOperationName adalah jenis yang sama yang dikembalikan oleh metode layanan web sinkron. Contoh kode berikut menunjukkan contoh ini:
public async Task<List<TodoItem>> RefreshDataAsync ()
{
...
var todoItems = await Task.Factory.FromAsync<ASMXService.TodoItem[]> (
todoService.BeginGetTodoItems,
todoService.EndGetTodoItems,
null,
TaskCreationOptions.None);
...
}
Pustaka Paralel Tugas (TPL) dapat menyederhanakan proses penggunaan pasangan metode mulai/akhir APM dengan merangkum operasi asinkron dalam objek yang sama Task
. Enkapsulasi ini disediakan oleh beberapa kelebihan beban Task.Factory.FromAsync
metode. Metode ini membuat Task
metode yang dijalankan TodoService.EndGetTodoItems
setelah TodoService.BeginGetTodoItems
metode selesai, dengan null
parameter yang menunjukkan bahwa tidak ada data yang diteruskan ke BeginGetTodoItems
delegasi. Terakhir, nilai TaskCreationOptions
enumerasi menentukan bahwa perilaku default untuk pembuatan dan eksekusi tugas harus digunakan.
Untuk informasi selengkapnya tentang APM, lihat Model Pemrograman Asinkron dan TPL dan Pemrograman Asinkron .NET Framework Tradisional di MSDN.
Untuk informasi selengkapnya tentang menggunakan layanan ASMX, lihat Menggunakan Layanan Web ASP.NET (ASMX).
Windows Communication Foundation (WCF)
WCF adalah kerangka kerja terpadu Microsoft untuk membangun aplikasi berorientasi layanan. Ini memungkinkan pengembang untuk membangun aplikasi terdistribusi yang aman, andal, ditransaksikan, dan dapat dioperasikan.
WCF menjelaskan layanan dengan berbagai kontrak berbeda yang mencakup hal-hal berikut:
- Kontrak data – menentukan struktur data yang membentuk dasar untuk konten dalam pesan.
- Kontrak pesan – buat pesan dari kontrak data yang ada.
- Kontrak kesalahan – memungkinkan kesalahan SOAP kustom ditentukan.
- Kontrak layanan – tentukan operasi yang didukung layanan dan pesan yang diperlukan untuk berinteraksi dengan setiap operasi. Mereka juga menentukan perilaku kesalahan kustom yang dapat dikaitkan dengan operasi pada setiap layanan.
Ada perbedaan antara ASP.NET Web Services (ASMX) dan WCF, tetapi penting untuk dipahami bahwa WCF mendukung kemampuan yang sama dengan yang disediakan ASMX - pesan SOAP melalui HTTP.
Penting
Dukungan platform Xamarin untuk WCF terbatas pada pesan SOAP yang dikodekan teks melalui HTTP/HTTPS menggunakan BasicHttpBinding
kelas . Selain itu, dukungan WCF memerlukan penggunaan alat yang hanya tersedia di lingkungan Windows untuk menghasilkan proksi.
Membuat Proksi
Proksi harus dihasilkan untuk menggunakan layanan WCF, yang memungkinkan aplikasi untuk terhubung ke layanan. Proksi dibangun dengan menggunakan metadata layanan yang menentukan metode dan konfigurasi layanan terkait. Metadata ini diekspos dalam bentuk dokumen Web Services Description Language (WSDL) yang dihasilkan oleh layanan web. Proksi dapat dibangun dengan menggunakan Penyedia Referensi Layanan Web Microsoft WCF di Visual Studio 2017 untuk menambahkan referensi layanan untuk layanan web ke Pustaka Standar .NET.
Alternatif untuk membuat proksi menggunakan Penyedia Referensi Layanan Web Microsoft WCF di Visual Studio 2017 adalah dengan menggunakan ServiceModel Metadata Utility Tool (svcutil.exe). Untuk informasi selengkapnya, lihat Alat Utilitas Metadata ServiceModel (Svcutil.exe).
Mengonfigurasi Proksi
Mengonfigurasi proksi yang dihasilkan umumnya akan mengambil dua argumen konfigurasi (tergantung pada SOAP 1.1/ASMX atau WCF) selama inisialisasi: EndpointAddress
dan/atau informasi pengikatan terkait, seperti yang ditunjukkan pada contoh di bawah ini:
var binding = new BasicHttpBinding () {
Name= "basicHttpBinding",
MaxReceivedMessageSize = 67108864,
};
binding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas() {
MaxArrayLength = 2147483646,
MaxStringContentLength = 5242880,
};
var timeout = new TimeSpan(0,1,0);
binding.SendTimeout= timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
client = new Service1Client (binding, new EndpointAddress ("http://192.168.1.100/Service1.svc"));
Pengikatan digunakan untuk menentukan detail transportasi, pengodean, dan protokol yang diperlukan agar aplikasi dan layanan dapat berkomunikasi satu sama lain. BasicHttpBinding
menentukan bahwa pesan SOAP yang dikodekan teks akan dikirim melalui protokol transportasi HTTP. Menentukan alamat titik akhir memungkinkan aplikasi terhubung ke instans layanan WCF yang berbeda, asalkan ada beberapa instans yang diterbitkan.
Mengonsumsi Proksi
Kelas proksi yang dihasilkan menyediakan metode untuk menggunakan layanan web yang menggunakan pola desain Model Pemrograman Asinkron (APM). Dalam pola ini, operasi asinkron diimplementasikan sebagai dua metode bernama BeginOperationName dan EndOperationName, yang memulai dan mengakhiri operasi asinkron.
Metode BeginOperationName memulai operasi asinkron dan mengembalikan objek yang mengimplementasikan IAsyncResult
antarmuka. Setelah memanggil BeginOperationName, aplikasi dapat terus menjalankan instruksi pada utas panggilan, sementara operasi asinkron terjadi pada utas kumpulan utas.
Untuk setiap panggilan ke BeginOperationName, aplikasi juga harus memanggil EndOperationName untuk mendapatkan hasil operasi. Nilai pengembalian EndOperationName adalah jenis yang sama yang dikembalikan oleh metode layanan web sinkron. Contoh kode berikut menunjukkan contoh ini:
public async Task<List<TodoItem>> RefreshDataAsync ()
{
...
var todoItems = await Task.Factory.FromAsync <ObservableCollection<TodoWCFService.TodoItem>> (
todoService.BeginGetTodoItems,
todoService.EndGetTodoItems,
null,
TaskCreationOptions.None);
...
}
Pustaka Paralel Tugas (TPL) dapat menyederhanakan proses penggunaan pasangan metode mulai/akhir APM dengan merangkum operasi asinkron dalam objek yang sama Task
. Enkapsulasi ini disediakan oleh beberapa kelebihan beban Task.Factory.FromAsync
metode. Metode ini membuat Task
metode yang dijalankan TodoServiceClient.EndGetTodoItems
setelah TodoServiceClient.BeginGetTodoItems
metode selesai, dengan null
parameter yang menunjukkan bahwa tidak ada data yang diteruskan ke BeginGetTodoItems
delegasi. Terakhir, nilai TaskCreationOptions
enumerasi menentukan bahwa perilaku default untuk pembuatan dan eksekusi tugas harus digunakan.
Untuk informasi selengkapnya tentang APM, lihat Model Pemrograman Asinkron dan TPL dan Pemrograman Asinkron .NET Framework Tradisional di MSDN.
Untuk informasi selengkapnya tentang menggunakan layanan WCF, lihat Menggunakan Layanan Web Windows Communication Foundation (WCF).
Menggunakan Keamanan Transportasi
Layanan WCF dapat menggunakan keamanan tingkat transportasi untuk melindungi dari penyadapan pesan. Platform Xamarin mendukung pengikatan yang menggunakan keamanan tingkat transportasi menggunakan SSL. Namun, mungkin ada kasus di mana tumpukan mungkin perlu memvalidasi sertifikat, yang mengakibatkan perilaku yang tidak terantisipasi. Validasi dapat ditimpa dengan mendaftarkan ServerCertificateValidationCallback
delegasi sebelum memanggil layanan, seperti yang ditunjukkan dalam contoh kode berikut:
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(se, cert, chain, sslerror) => { return true; };
Ini mempertahankan enkripsi transportasi saat mengabaikan validasi sertifikat sisi server. Namun, pendekatan ini secara efektif mengabaikan masalah kepercayaan yang terkait dengan sertifikat dan mungkin tidak sesuai. Untuk informasi selengkapnya, lihat Menggunakan Akar Tepercaya Dengan Hormat di mono-project.com.
Menggunakan Keamanan Kredensial Klien
Layanan WCF mungkin juga mengharuskan klien layanan untuk mengautentikasi menggunakan kredensial. Platform Xamarin tidak mendukung Protokol Keamanan WS, yang memungkinkan klien mengirim kredensial di dalam amplop pesan SOAP. Namun, platform Xamarin memang mendukung kemampuan untuk mengirim kredensial Autentikasi Dasar HTTP ke server dengan menentukan yang sesuai ClientCredentialType
:
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
Kemudian, kredensial autentikasi dasar dapat ditentukan:
client.ClientCredentials.UserName.UserName = @"foo";
client.ClientCredentials.UserName.Password = @"mrsnuggles";
Untuk informasi selengkapnya tentang autentikasi dasar HTTP, meskipun dalam konteks layanan web REST, lihat Mengautentikasi Layanan Web RESTful.