Sampel GettingStarted menunjukkan cara menerapkan layanan umum dan klien umum menggunakan Windows Communication Foundation (WCF). Sampel ini adalah dasar untuk semua sampel teknologi dasar lainnya.
Catatan
Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.
Layanan ini menjelaskan operasi yang dilakukannya dalam kontrak layanan yang dieksposnya secara publik sebagai metadata. Layanan ini juga berisi kode untuk mengimplementasikan operasi.
Pada Windows Vista, layanan dihosting di Layanan Aktivasi Windows (WAS). Pada Windows XP dan Windows Server 2003, ini dihosting oleh Layanan Informasi Internet (IIS) dan ASP.NET. Hosting layanan di IIS atau WAS memungkinkan layanan diaktifkan secara otomatis ketika diakses untuk pertama kalinya.
Catatan
Jika Anda lebih suka memulai dengan sampel yang menghosting layanan di aplikasi konsol alih-alih IIS, lihat sampel Host Mandiri.
Layanan dan klien menentukan detail akses dalam pengaturan file konfigurasi, yang memberikan fleksibilitas pada saat penyebaran. Ini termasuk definisi titik akhir yang menentukan alamat, pengikatan, dan kontrak. Pengikatan menentukan detail transportasi dan keamanan tentang bagaimana layanan akan diakses.
Layanan mengonfigurasi perilaku run-time untuk menerbitkan metadatanya.
Layanan tersebut mengimplementasikan kontrak yang mendefinisikan pola komunikasi balasan permintaan. Kontrak didefinisikan oleh antarmuka ICalculator, yang mengekspos operasi matematika (tambah, kurang, kali, dan bagi). Klien membuat permintaan ke operasi matematika tertentu dan layanan membalas dengan hasilnya. Layanan menerapkan kontrak ICalculator yang didefinisikan dalam kode berikut.
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
Public Interface ICalculator
<OperationContract()>
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
Implementasi layanan menghitung dan mengembalikan hasil yang sesuai, seperti yang ditunjukkan dalam contoh kode berikut.
' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
Layanan ini mengekspos titik akhir untuk berkomunikasi dengan layanan, yang ditentukan menggunakan file konfigurasi (Web.config), seperti yang ditunjukkan dalam konfigurasi sampel berikut.
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- ICalculator is exposed at the base address provided by
host: http://localhost/servicemodelsamples/service.svc. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
...
</service>
</services>
Layanan ini mengekspos titik akhir di alamat dasar yang disediakan oleh host IIS atau WAS. Pengikatan dikonfigurasi dengan WSHttpBinding standar, yang menyediakan komunikasi HTTP dan protokol layanan Web standar untuk pengalamatan dan keamanan. Kontrak adalah ICalculator yang diimplementasikan oleh layanan.
Seperti yang dikonfigurasi, layanan dapat diakses di http://localhost/servicemodelsamples/service.svc oleh klien di komputer yang sama. Agar klien di komputer jarak jauh dapat mengakses layanan, nama domain yang memenuhi syarat harus ditentukan sebagai ganti localhost.
Kerangka kerja tidak mengekspos metadata secara default. Dengan demikian, layanan mengaktifkan ServiceMetadataBehavior dan mengekspos titik akhir pertukaran metadata (MEX) di http://localhost/servicemodelsamples/service.svc/mex. Konfigurasi berikut menunjukkan hal ini.
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
...
<!-- the mex endpoint is exposed at
http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<!--For debugging purposes set the includeExceptionDetailInFaults
attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Klien berkomunikasi menggunakan jenis kontrak tertentu dengan menggunakan kelas klien yang dihasilkan oleh Alat Utilitas Metadata ServiceModel (Svcutil.exe). Klien yang dihasilkan ini terkandung dalam file generatedClient.cs atau generatedClient.vb. Utilitas ini mengambil metadata untuk layanan tertentu dan menghasilkan klien untuk digunakan oleh aplikasi klien untuk berkomunikasi menggunakan jenis kontrak tertentu. Layanan yang dihosting harus tersedia untuk menghasilkan kode klien, karena layanan digunakan untuk mengambil metadata yang diperbarui.
Jalankan perintah berikut dari perintah SDK di direktori klien untuk menghasilkan proksi yang diketik:
Dengan menggunakan klien yang dihasilkan, Anda dapat mengakses titik akhir layanan dengan mengonfigurasi alamat dan pengikatan yang sesuai. Seperti layanan, klien menggunakan file konfigurasi (App.config) untuk menentukan titik akhir yang ingin dikomunikasikan. Konfigurasi titik akhir klien terdiri dari alamat absolut untuk titik akhir layanan, pengikatan, dan kontrak, seperti yang ditunjukkan dalam contoh berikut.
Implementasi klien membuat instans klien dan menggunakan antarmuka yang diketik untuk mulai berkomunikasi dengan layanan, seperti yang ditunjukkan dalam kode contoh berikut.
' Create a client
Dim client As New CalculatorClient()
' Call the Add service operation.
Dim value1 = 100.0R
Dim value2 = 15.99R
Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)
' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)
' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)
'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client releases all communication resources.
client.Close();
Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan komputer klien.
Aplikasi layanan mikro terdiri dari layanan kecil, versi independen, dan berfokus pada pelanggan yang dapat diskalakan yang berkomunikasi satu sama lain dengan menggunakan protokol standar dan antarmuka yang terdefinisi dengan baik. Setiap layanan mikro biasanya merangkum logika bisnis sederhana, yang dapat Anda skalakan atau masuk. Anda menguji, menyebarkan, dan mengelola layanan mikro secara independen. Tim yang lebih kecil mengembangkan layanan mikro berdasarkan skenario pelanggan, dan memilih teknologi