Bagikan melalui


Mendapatkan Sampel Mulai

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.

Klien berisi definisi kontrak layanan dan kelas proksi untuk mengakses layanan. Kode proksi dihasilkan dari metadata layanan menggunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe).

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
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

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:

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Untuk menghasilkan klien dalam jenis Visual Basic, ketik berikut ini dari perintah SDK:

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

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.

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

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.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Sampel Mulai menunjukkan cara standar untuk membuat layanan dan klien. Dasar lainnya dibangun pada sampel ini untuk menunjukkan fitur produk tertentu.

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  3. Untuk menjalankan sampel dalam konfigurasi tunggal atau lintas komputer, ikuti petunjuk di Menjalankan Sampel Windows Communication Foundation.

Lihat juga