Bagikan melalui


ServiceContractAttribute Kelas

Definisi

Menunjukkan bahwa antarmuka atau kelas mendefinisikan kontrak layanan dalam aplikasi Windows Communication Foundation (WCF).

public ref class ServiceContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, AllowMultiple=false, Inherited=false)]
public sealed class ServiceContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, AllowMultiple=false, Inherited=false)>]
type ServiceContractAttribute = class
    inherit Attribute
Public NotInheritable Class ServiceContractAttribute
Inherits Attribute
Warisan
ServiceContractAttribute
Atribut

Contoh

Contoh kode berikut menunjukkan cara menerapkan ServiceContractAttribute ke antarmuka untuk menentukan kontrak layanan dengan satu metode layanan, yang ditunjukkan OperationContractAttributeoleh . Dalam hal ini, tingkat perlindungan yang diperlukan pengikatan untuk semua pesan adalah ProtectionLevel.EncryptAndSign.

Contoh kode kemudian mengimplementasikan kontrak tersebut pada SampleService kelas .

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    Name="SampleService",
    ProtectionLevel=ProtectionLevel.EncryptAndSign
  )]
  public interface ISampleService{
    [OperationContract]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
      return "The service greets you: " + msg;
  }

  #endregion
  }
}


Imports System.Collections.Generic
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://microsoft.wcf.documentation", Name:="SampleService", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
  Public Interface ISampleService
    <OperationContract> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

Contoh kode berikut menunjukkan file konfigurasi sederhana untuk layanan sebelumnya yang membuat satu titik akhir.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="mex"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
         />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mex">
          <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Contoh kode berikut menunjukkan klien sederhana yang memanggil sebelumnya SampleService.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

public class Client
{
  public static void Main()
  {
    // Picks up configuration from the config file.
    SampleServiceClient wcfClient = new SampleServiceClient();
    try
    {
        // Making calls.
        Console.WriteLine("Enter the greeting to send: ");
        string greeting = Console.ReadLine();
        Console.WriteLine("The service responded: " + wcfClient.SampleMethod(greeting));

        Console.WriteLine("Press ENTER to exit:");
        Console.ReadLine();

        // Done with service.
        wcfClient.Close();
        Console.WriteLine("Done!");
    }
    catch (TimeoutException timeProblem)
    {
      Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
    catch(CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
  }
}


Imports System.ServiceModel
Imports System.ServiceModel.Channels

Public Class Client
  Public Shared Sub Main()
    ' Picks up configuration from the config file.
    Dim wcfClient As New SampleServiceClient()
    Try
        ' Making calls.
        Console.WriteLine("Enter the greeting to send: ")
            Dim greeting = Console.ReadLine()
        Console.WriteLine("The service responded: " & wcfClient.SampleMethod(greeting))

        Console.WriteLine("Press ENTER to exit:")
        Console.ReadLine()

        ' Done with service. 
        wcfClient.Close()
        Console.WriteLine("Done!")
    Catch timeProblem As TimeoutException
      Console.WriteLine("The service operation timed out. " & timeProblem.Message)
      wcfClient.Abort()
      Console.Read()
    Catch commProblem As CommunicationException
      Console.WriteLine("There was a communication problem. " & commProblem.Message)
      wcfClient.Abort()
      Console.Read()
    End Try
  End Sub
End Class

Keterangan

ServiceContractAttribute Gunakan atribut pada antarmuka (atau kelas) untuk menentukan kontrak layanan. Kemudian gunakan OperationContractAttribute atribut pada satu atau beberapa metode kelas (atau antarmuka) untuk menentukan operasi layanan kontrak. Ketika kontrak layanan diimplementasikan dan dikombinasikan dengan Pengikatan dan EndpointAddress objek, kontrak layanan diekspos untuk digunakan oleh klien. Untuk gambaran umum proses menggunakan contoh sederhana, lihat Tutorial Memulai. Untuk informasi selengkapnya tentang membuat kontrak layanan, lihat Merancang dan Menerapkan Layanan.

Informasi yang dinyatakan oleh dan ServiceContractAttribute antarmukanya secara longgar terkait dengan elemen Web Services Description Language (WSDL). <portType> Kontrak layanan digunakan di sisi layanan untuk menentukan apa yang diekspos titik akhir layanan kepada penelepon. Ini juga digunakan di sisi klien untuk menentukan kontrak titik akhir tempat klien berkomunikasi dan, dalam kasus kontrak dupleks, untuk menentukan kontrak panggilan balik (menggunakan CallbackContract properti) yang harus diterapkan klien untuk berpartisipasi dalam percakapan dupleks.

Nota

Antarmuka atau kelas yang dihiasi juga ServiceContractAttribute harus memiliki setidaknya satu metode yang ditandai dengan OperationContractAttribute atribut untuk mengekspos fungsionalitas apa pun. Lihat bagian Contoh untuk contoh kode penggunaan paling sederhana dari dua atribut untuk menentukan dan mengimplementasikan layanan.

ServiceContractAttribute Gunakan properti untuk mengubah kontrak layanan.

  • Properti ConfigurationName menentukan nama elemen layanan dalam file konfigurasi yang akan digunakan.

  • Properti Name dan Namespace mengontrol nama dan namespace kontrak dalam elemen WSDL <portType> .

  • Properti SessionMode menentukan apakah kontrak memerlukan pengikatan yang mendukung sesi.

  • Properti CallbackContract menentukan kontrak pengembalian dalam percakapan dua arah (dupleks).

  • Properti HasProtectionLevel dan ProtectionLevel menunjukkan apakah semua pesan yang mendukung kontrak memiliki nilai eksplisit ProtectionLevel , dan jika demikian, apa tingkatnya.

Layanan menerapkan kontrak layanan, yang mewakili pertukaran data yang didukung oleh jenis layanan. Kelas layanan dapat menerapkan kontrak layanan (dengan menerapkan antarmuka yang ditandai dengan ServiceContractAttribute metode yang ditandai dengan OperationContractAttribute) atau dapat ditandai dengan ServiceContractAttribute dan menerapkan OperationContractAttribute atribut ke metodenya sendiri. (Jika kelas mengimplementasikan antarmuka yang ditandai dengan ServiceContractAttribute, itu tidak dapat ditandai dengan ServiceContractAttribute.) Metode pada jenis layanan yang ditandai dengan OperationContractAttribute diperlakukan sebagai bagian dari kontrak layanan default yang ditentukan oleh jenis layanan itu sendiri. Untuk detail tentang operasi layanan, lihat OperationContractAttribute.

Secara default, Name properti dan Namespace adalah nama jenis kontrak dan http://tempuri.org, masing-masing, dan ProtectionLevel adalah ProtectionLevel.None. Disarankan agar kontrak layanan secara eksplisit mengatur nama, namespace, dan tingkat perlindungan mereka menggunakan properti ini. Melakukannya mencapai dua tujuan. Pertama, ini membangun kontrak yang tidak terhubung langsung ke informasi jenis terkelola, memungkinkan Anda untuk merefaktor kode terkelola dan namespace anda tanpa melanggar kontrak seperti yang dinyatakan dalam WSDL. Kedua, secara eksplisit memerlukan tingkat perlindungan tertentu pada kontrak itu sendiri memungkinkan runtime untuk memvalidasi apakah konfigurasi pengikatan mendukung tingkat keamanan tersebut, mencegah konfigurasi yang buruk mengekspos informasi sensitif. Untuk informasi selengkapnya tentang tingkat perlindungan, lihat Memahami Tingkat Perlindungan.

Untuk mengekspos layanan untuk digunakan oleh aplikasi klien, buat aplikasi host untuk mendaftarkan titik akhir layanan Anda dengan Windows Communication Foundation (WCF). Anda dapat menghosting layanan WCF menggunakan Windows Activation Services (WAS), dalam aplikasi konsol, aplikasi Windows Service, aplikasi ASP.NET, aplikasi Windows Forms, atau domain aplikasi lainnya.

Hosting di WAS sangat mirip dengan membuat aplikasi ASP.NET. Untuk detailnya, lihat Cara: Menghosting Layanan WCF di IIS.

Klien menggunakan antarmuka kontrak layanan (antarmuka yang ditandai dengan ServiceContractAttribute) untuk membuat saluran ke layanan atau mereka menggunakan objek klien (yang menggabungkan informasi jenis antarmuka kontrak layanan dengan ClientBase<TChannel> kelas ) untuk berkomunikasi dengan layanan Anda. Untuk detail tentang saluran klien ke layanan, lihat ChannelFactory<TChannel>kelas dan Gambaran Umum Klien WCF.

ServiceContractAttribute Menggunakan kelas atau antarmuka untuk mewarisi dari kelas atau antarmuka lain ServiceContractAttribute memperluas kontrak induk. Misalnya, jika IChildContract antarmuka ditandai dengan ServiceContractAttribute dan diwarisi dari antarmuka kontrak layanan lain, IParentContract, IChildContract kontrak layanan berisi metode dan IParentContractIChildContract. Memperluas kontrak (baik pada kelas atau antarmuka) sangat mirip dengan memperluas kelas dan antarmuka terkelola.

Pendekatan paling fleksibel untuk membuat layanan adalah menentukan antarmuka kontrak layanan terlebih dahulu dan kemudian meminta kelas layanan Anda mengimplementasikan antarmuka tersebut. (Ini juga merupakan cara paling sederhana untuk membangun layanan Anda jika Anda harus menerapkan kontrak layanan yang telah ditentukan oleh orang lain.) Membangun layanan secara langsung dengan menandai kelas dengan ServiceContractAttribute dan metodenya dengan OperationContractAttribute bekerja ketika layanan hanya mengekspos satu kontrak (tetapi kontrak tersebut dapat diekspos oleh lebih dari satu titik akhir).

CallbackContract Gunakan properti untuk menunjukkan kontrak layanan lain yang, ketika terikat bersama dengan kontrak layanan asli, tentukan pertukaran pesan yang dapat mengalir dengan dua cara secara independen. Untuk detailnya, lihat CallbackContract.

Konstruktor

Nama Deskripsi
ServiceContractAttribute()

Menginisialisasi instans baru dari kelas ServiceContractAttribute.

Properti

Nama Deskripsi
CallbackContract

Mendapatkan atau menetapkan jenis kontrak panggilan balik jika kontraknya adalah kontrak dupleks.

ConfigurationName

Mendapatkan atau mengatur nama yang digunakan untuk menemukan layanan dalam file konfigurasi aplikasi.

HasProtectionLevel

Mendapatkan nilai yang menunjukkan apakah anggota memiliki tingkat perlindungan yang ditetapkan.

Name

Mendapatkan atau mengatur nama untuk <portType> elemen dalam Web Services Description Language (WSDL).

Namespace

Mendapatkan atau mengatur namespace <portType> elemen dalam Web Services Description Language (WSDL).

ProtectionLevel

Menentukan apakah pengikatan untuk kontrak harus mendukung nilai ProtectionLevel properti.

SessionMode

Mendapatkan atau mengatur apakah sesi diizinkan, tidak diizinkan atau diperlukan.

TypeId

Ketika diimplementasikan dalam kelas turunan, mendapatkan pengidentifikasi unik untuk Attributeini.

(Diperoleh dari Attribute)

Metode

Nama Deskripsi
Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

Ketika ditimpa dalam kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa dalam kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

Nama Deskripsi
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)

Berlaku untuk

Lihat juga