ServiceContractAttribute ServiceContractAttribute ServiceContractAttribute ServiceContractAttribute Class

Définition

Indique qu’une interface ou une classe définit un contrat de service dans une application Windows Communication Foundation (WCF).Indicates that an interface or a class defines a service contract in a Windows Communication Foundation (WCF) application.

public ref class ServiceContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, Inherited=false)]
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, AllowMultiple=false, Inherited=false)]
public sealed class ServiceContractAttribute : Attribute
type ServiceContractAttribute = class
    inherit Attribute
Public NotInheritable Class ServiceContractAttribute
Inherits Attribute
Héritage
ServiceContractAttributeServiceContractAttributeServiceContractAttributeServiceContractAttribute
Attributs

Exemples

L'exemple de code suivant indique comment appliquer la ServiceContractAttribute à une interface pour définir un contrat de service avec une méthode de service, tel qu'indiqué par la OperationContractAttribute.The following code example shows how to apply the ServiceContractAttribute to an interface to define a service contract with one service method, indicated by the OperationContractAttribute. Dans ce cas, le niveau de protection requis des liaisons pour tous les messages est ProtectionLevel.EncryptAndSign.In this case, the protection level required of bindings for all messages is ProtectionLevel.EncryptAndSign.

L'exemple de code implémente ensuite ce contrat sur la classe SampleService.The code example then implements that contract on the SampleService class.

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
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

L'exemple de code suivant présente un fichier de configuration simple pour le service précédent qui crée un point de terminaison.The following code example shows a simple configuration file for the preceding service that creates one endpoint.

<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>

L'exemple de code suivant affiche un client simple qui appelle le SampleService précédent.The following code example shows a simple client that invokes the preceding 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
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

Remarques

Utilisez l'attribut ServiceContractAttribute sur une interface (ou une classe) pour définir un contrat de service.Use the ServiceContractAttribute attribute on an interface (or class) to define a service contract. Puis utilisez l'attribut OperationContractAttribute sur une ou plusieurs méthodes de classe (ou d'interface) pour définir les opérations de service du contrat.Then use the OperationContractAttribute attribute on one or more of the class (or interface) methods to define the contract's service operations. Lorsque le contrat de service est implémenté et associé un liaisons et un EndpointAddress de l’objet, le contrat de service est exposé pour une utilisation par les clients.When the service contract is implemented and combined with a Bindings and an EndpointAddress object, the service contract is exposed for use by clients. Pour une vue d’ensemble du processus à l’aide des exemples simples, consultez Getting Started Tutorial.For an overview of the process using simple examples, see Getting Started Tutorial. Pour plus d’informations sur la création de contrats de service, consultez conception et implémentation de Services.For more information about creating service contracts, see Designing and Implementing Services.

Les informations exprimées par une ServiceContractAttribute et son interface sont faiblement mises en rapport avec l'élément <portType> WSDL (Web Services Description Language).The information expressed by a ServiceContractAttribute and its interface is loosely related to the Web Services Description Language (WSDL) <portType> element. Côté service, un contrat de service permet de spécifier à quel point de terminaison du service expose aux appelants.A service contract is used on the service side to specify what the service's endpoint exposes to callers. Il est également utilisé sur le côté client pour spécifier le contrat du point de terminaison avec lequel le client communique et, dans le cas de contrats duplex, pour spécifier le contrat de rappel (à l'aide de la propriété CallbackContract) que le client doit implémenter afin de participer à une conversation duplex.It is also used on the client side to specify the contract of the endpoint with which the client communicates and, in the case of duplex contracts, to specify the callback contract (using the CallbackContract property) that the client must implement in order to participate in a duplex conversation.

Notes

Une interface ou une classe qui est décorée avec ServiceContractAttribute doit également avoir au moins une méthode marquée avec l'attribut OperationContractAttribute pour exposer toutes les fonctionnalités.An interface or class that is decorated with ServiceContractAttribute must also have at least one method marked with the OperationContractAttribute attribute to expose any functionality. Consultez la section Exemples pour obtenir un exemple de code de l'utilisation la plus simple des deux attributs pour définir et implémenter un service.See the Examples section for a code example of the simplest use of the two attributes to define and implement a service.

Utilisez les propriétés ServiceContractAttribute pour modifier le contrat de service.Use the ServiceContractAttribute properties to modify the service contract.

  • La propriété ConfigurationName spécifie le nom de l'élément de service dans le fichier de configuration à utiliser.The ConfigurationName property specifies the name of the service element in the configuration file to use.

  • Les propriétés Name et Namespace contrôlent le nom et l'espace de noms du contrat dans l'élément <portType> WSDL.The Name and Namespace properties control the name and namespace of the contract in the WSDL <portType> element.

  • La propriété SessionMode spécifie si le contrat requiert une liaison qui prend en charge des sessions.The SessionMode property specifies whether the contract requires a binding that supports sessions.

  • La propriété CallbackContract spécifie le contrat de retour dans une conversation bidirectionnelle (duplex).The CallbackContract property specifies the return contract in a two-way (duplex) conversation.

  • Les propriétés HasProtectionLevel et ProtectionLevel indiquent si tous les messages qui prennent en charge le contrat ont une valeur ProtectionLevel explicite, et le cas échéant, quel est le niveau.The HasProtectionLevel and ProtectionLevel properties indicate whether all messages supporting the contract have a explicit ProtectionLevel value, and if so, what that level is.

Les services implémentent des contrats de service qui représentent l'échange de données qu'un type de service prend en charge.Services implement service contracts, which represent the data exchange that a service type supports. Une classe de service peut implémenter un contrat de service (en implémentant une interface marquée avec ServiceContractAttribute qui a des méthodes marquées avec OperationContractAttribute) ou elle peut être marquée avec la ServiceContractAttribute et appliquer l'attribut OperationContractAttribute à ses propres méthodes.A service class can implement a service contract (by implementing an interface marked with ServiceContractAttribute that has methods marked with OperationContractAttribute) or it can be marked with the ServiceContractAttribute and apply the OperationContractAttribute attribute to its own methods. Si une classe implémente une interface marquée avec ServiceContractAttribute, elle ne peut pas être marquée avec ServiceContractAttribute. Les méthodes sur les types de service qui sont marqués avec le OperationContractAttribute sont traitées dans le cadre d'un contrat de service par défaut spécifié par le type de service lui-même.(If a class implements an interface marked with ServiceContractAttribute, it cannot be itself marked with ServiceContractAttribute.) Methods on service types that are marked with the OperationContractAttribute are treated as part of a default service contract specified by the service type itself. Pour plus d'informations sur les opérations de service, consultez OperationContractAttribute.For details about service operations, see OperationContractAttribute.

Par défaut, les propriétés Name et Namespace correspondent au nom du type de contrat et de http://tempuri.org, respectivement, et ProtectionLevel a la valeur ProtectionLevel.None.By default, the Name and Namespace properties are the name of the contract type and http://tempuri.org, respectively, and ProtectionLevel is ProtectionLevel.None. Il est recommandé que les contrats de service définissent explicitement leurs noms, espaces de noms et niveaux de protection à l'aide de ces propriétés.It is recommended that service contracts explicitly set their names, namespaces, and protection levels using these properties. Cela permet d'assurer deux fonctions.Doing so accomplishes two goals. D'une part, cela génère un contrat qui n'est pas directement connecté aux informations de type managé, en vous permettant de refactoriser votre code managé et vos espaces de noms sans rompre le contrat comme cela est exprimé dans WSDL.First, it builds a contract that is not directly connected to the managed type information, enabling you to refactor your managed code and namespaces without breaking the contract as it is expressed in WSDL. D’autre part, exiger de façon explicite un certain niveau de protection sur le contrat permet à l’exécution de valider si la configuration de liaison prend en charge ce niveau de sécurité, ce qui permet d’éviter d’exposer des informations sensibles en raison d’une mauvaise configuration.Second, explicitly requiring a certain level of protection on the contract itself enables the runtime to validate whether the binding configuration supports that level of security, preventing poor configuration from exposing sensitive information. Pour plus d’informations sur les niveaux de protection, consultez niveau de Protection de présentation.For more information about protection levels, see Understanding Protection Level.

Pour exposer un service à utiliser par les applications clientes, créez une application hôte pour inscrire votre point de terminaison de service avec Windows Communication Foundation (WCF).To expose a service for use by client applications, create a host application to register your service endpoint with Windows Communication Foundation (WCF). Vous pouvez héberger des services WCF à l’aide de Windows Activation Services (WAS) dans les applications de console, applications de Service de Windows, les applications ASP.NET, les applications Windows Forms ou tout autre type de domaine d’application.You can host WCF services using Windows Activation Services (WAS), in console applications, Windows Service applications, ASP.NET applications, Windows Forms applications, or any other kind of application domain.

L'hébergement dans WAS est extrêmement similaire à la création d'une application ASP.NET.Hosting in the WAS is very similar to creating an ASP.NET application. Pour plus d’informations, consultez Guide pratique pour Héberger un Service WCF dans IIS.For details, see How to: Host a WCF Service in IIS.

Les clients utilisent l'interface de contrat de service (l'interface marquée avec ServiceContractAttribute) pour créer un canal au service ou ils utilisent les objets clients (qui associent les informations de type de l'interface de contrat de service avec la classe ClientBase<TChannel>) pour communiquer avec votre service.Clients either use the service contract interface (the interface marked with ServiceContractAttribute) to create a channel to the service or they use the client objects (which combine the type information of the service contract interface with the ClientBase<TChannel> class) to communicate with your service. Pour plus d’informations sur les canaux clients aux services, consultez le ChannelFactory<TChannel> classe et WCF Client Overview.For details on client channels to services, see the ChannelFactory<TChannel> class and WCF Client Overview.

L'utilisation d'une classe ou d'une interface ServiceContractAttribute pour hériter d'une autre classe ou interface ServiceContractAttribute étend le contrat parent.Using a ServiceContractAttribute class or interface to inherit from another ServiceContractAttribute class or interface extends the parent contract. Par exemple, si une interface IChildContract est marquée avec ServiceContractAttribute et héritée d'une autre interface de contrat de service, IParentContract, le contrat de service IChildContract contient les méthodes de IParentContract et de IChildContract.For example, if an IChildContract interface is marked with ServiceContractAttribute and inherited from another service contract interface, IParentContract, the IChildContract service contract contains the methods of both IParentContract and IChildContract. L'extension des contrats (sur les classes ou les interfaces) est extrêmement similaire à l'extension des classes et des interfaces managées.Extending contracts (whether on classes or interfaces) is very similar to extending managed classes and interfaces.

L'approche la plus flexible en termes de création de services consiste à définir tout d'abord des interfaces de contrat de service, puis de faire implémenter cette interface par votre contrat de service.The most flexible approach to creating services is to define service contract interfaces first and then have your service class implement that interface. C'est également la méthode la plus simple pour générer vos services si vous devez implémenter des contrats de service définis par d'autres. Générer directement des services en marquant une classe avec ServiceContractAttribute et ses méthodes avec OperationContractAttribute fonctionne lorsque le service expose uniquement un seul contrat (mais ce contrat peut être exposé par plusieurs points de terminaison).(This is also the simplest way to build your services if you must implement service contracts that have been defined by others.) Building services directly by marking a class with ServiceContractAttribute and its methods with OperationContractAttribute works when the service exposes only one contract (but that contract can be exposed by more than one endpoint).

Utilisez le CallbackContract propriété pour indiquer un autre contrat de service qui, lorsqu’il est associé le contrat de service d’origine, définissent un échange de messages qui peut circuler indépendamment de deux manières.Use the CallbackContract property to indicate another service contract that, when bound together with the original service contract, define a message exchange that can flow in two ways independently. Pour plus d'informations, consultez CallbackContract.For details, see CallbackContract.

Constructeurs

ServiceContractAttribute() ServiceContractAttribute() ServiceContractAttribute() ServiceContractAttribute()

Initialise une nouvelle instance de la classe ServiceContractAttribute.Initializes a new instance of the ServiceContractAttribute class.

Propriétés

CallbackContract CallbackContract CallbackContract CallbackContract

Obtient ou définit le type de contrat de rappel lorsque le contrat est un contrat duplex.Gets or sets the type of callback contract when the contract is a duplex contract.

ConfigurationName ConfigurationName ConfigurationName ConfigurationName

Obtient ou définit le nom utilisé pour localiser le service dans un fichier de configuration de l'application.Gets or sets the name used to locate the service in an application configuration file.

HasProtectionLevel HasProtectionLevel HasProtectionLevel HasProtectionLevel

Obtient une valeur qui indique si un niveau de protection a été assigné au membre.Gets a value that indicates whether the member has a protection level assigned.

Name Name Name Name

Obtient ou définit le nom pour l'élément <portType> dans WSDL (Web Services Description Language).Gets or sets the name for the <portType> element in Web Services Description Language (WSDL).

Namespace Namespace Namespace Namespace

Obtient ou définit l'espace de noms de l'élément <portType> dans WSDL (Web Services Description Language).Gets or sets the namespace of the <portType> element in Web Services Description Language (WSDL).

ProtectionLevel ProtectionLevel ProtectionLevel ProtectionLevel

Spécifie si la liaison pour le contrat doit prendre en charge la valeur de la propriété ProtectionLevel.Specifies whether the binding for the contract must support the value of the ProtectionLevel property.

SessionMode SessionMode SessionMode SessionMode

Obtient ou définit si les sessions sont autorisées, ne sont pas autorisées ou sont requises.Gets or sets whether sessions are allowed, not allowed or required.

TypeId TypeId TypeId TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

Méthodes

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Retourne le code de hachage de cette instance.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

Implémentations d’interfaces explicites

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

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

S’applique à

Voir aussi