Bagikan melalui


Contoh Memulai

Sampel GettingStarted menunjukkan cara menerapkan layanan umum dan klien khas menggunakan Windows Communication Foundation (WCF). Sampel ini adalah dasar untuk semua sampel teknologi dasar lainnya.

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Layanan ini menjelaskan operasi yang dilakukannya dalam kontrak layanan yang diekspos 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 ServiceModel Metadata Utility Tool (Svcutil.exe).

Pada Windows Vista, layanan dihosting di Layanan Aktivasi Windows (WAS). Pada Windows XP dan Windows Server 2003, ini dihosting oleh Internet Information Services (IIS) dan ASP.NET. Hosting layanan di IIS atau WAS memungkinkan layanan diaktifkan secara otomatis ketika diakses untuk pertama kalinya.

Nota

Jika Anda lebih suka memulai dengan sampel yang menghosting layanan di aplikasi konsol alih-alih IIS, lihat sampel Self-Host .

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 runtime untuk menerbitkan metadatanya.

Layanan ini menerapkan kontrak yang mendefinisikan pola komunikasi balasan permintaan. Kontrak didefinisikan oleh ICalculator antarmuka, yang mengekspos operasi matematika (tambahkan, kurangi, kalikan, dan bagi). Klien membuat permintaan ke operasi matematika tertentu dan layanan membalas dengan hasilnya. Layanan ini menerapkan ICalculator kontrak yang tercantum 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 standar WSHttpBinding, yang menyediakan komunikasi HTTP dan protokol layanan Web standar untuk alamat dan keamanan. Kontrak adalah yang diterapkan ICalculator oleh layanan.

Sesuai dengan konfigurasi, layanan dapat diakses melalui http://localhost/servicemodelsamples/service.svc oleh klien di komputer yang sama. Agar klien di komputer jarak jauh dapat mengakses layanan, nama domain yang sepenuhnya memenuhi syarat harus ditentukan alih-alih 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 ServiceModel Metadata Utility Tool (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 prompt perintah SDK di direktori klien untuk menghasilkan proksi yang di ketik:

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

Untuk menghasilkan klien di Visual Basic, ketik berikut ini dari prompt 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, klien dapat mengakses titik akhir layanan tertentu 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 contoh kode 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 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 Memulai menunjukkan cara standar untuk membuat layanan dan klien. Bangun Dasar lainnya berdasarkan sampel ini untuk mendemonstrasikan fitur produk tertentu.

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi dalam Menjalankan Sampel Windows Communication Foundation.

Lihat juga