ServiceContractAttribute Classe

Definição

Indica que uma interface ou classe define um contrato de serviço em um aplicativo WCF (Windows Communication Foundation).Indicates that an interface or a class defines a service contract in a Windows Communication Foundation (WCF) application.

public ref class ServiceContractAttribute sealed : Attribute
public sealed class ServiceContractAttribute : 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, Inherited=false)]
public sealed class ServiceContractAttribute : Attribute
type ServiceContractAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, AllowMultiple=false, Inherited=false)>]
type ServiceContractAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, Inherited=false)>]
type ServiceContractAttribute = class
    inherit Attribute
Public NotInheritable Class ServiceContractAttribute
Inherits Attribute
Herança
ServiceContractAttribute
Atributos

Exemplos

O exemplo de código a seguir mostra como aplicar o ServiceContractAttribute a uma interface para definir um contrato de serviço com um método de serviço, indicado pelo 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. Nesse caso, o nível de proteção exigido de associações para todas as mensagens é ProtectionLevel.EncryptAndSign .In this case, the protection level required of bindings for all messages is ProtectionLevel.EncryptAndSign.

Em seguida, o exemplo de código implementa esse contrato na SampleService classe.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.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

O exemplo de código a seguir mostra um arquivo de configuração simples para o serviço anterior que cria um ponto de extremidade.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>

O exemplo de código a seguir mostra um cliente simples que invoca o anterior SampleService .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.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

Comentários

Use o ServiceContractAttribute atributo em uma interface (ou classe) para definir um contrato de serviço.Use the ServiceContractAttribute attribute on an interface (or class) to define a service contract. Em seguida, use o OperationContractAttribute atributo em um ou mais métodos de classe (ou interface) para definir as operações de serviço do contrato.Then use the OperationContractAttribute attribute on one or more of the class (or interface) methods to define the contract's service operations. Quando o contrato de serviço é implementado e combinado com associações e um EndpointAddress objeto, o contrato de serviço é exposto para uso pelos clientes.When the service contract is implemented and combined with a Bindings and an EndpointAddress object, the service contract is exposed for use by clients. Para obter uma visão geral do processo usando exemplos simples, consulte introdução tutorial.For an overview of the process using simple examples, see Getting Started Tutorial. Para obter mais informações sobre como criar contratos de serviço, consulte projetando e implementando serviços.For more information about creating service contracts, see Designing and Implementing Services.

As informações expressas por uma ServiceContractAttribute e sua interface estão livremente relacionadas ao elemento WSDL (Web Services Description Language) <portType> .The information expressed by a ServiceContractAttribute and its interface is loosely related to the Web Services Description Language (WSDL) <portType> element. Um contrato de serviço é usado no lado do serviço para especificar o que o ponto de extremidade do serviço expõe aos chamadores.A service contract is used on the service side to specify what the service's endpoint exposes to callers. Ele também é usado no lado do cliente para especificar o contrato do ponto de extremidade com o qual o cliente se comunica e, no caso de contratos duplex, para especificar o contrato de retorno de chamada (usando a CallbackContract Propriedade) que o cliente deve implementar para participar de uma conversa 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.

Observação

Uma interface ou classe que é decorada com ServiceContractAttribute o também deve ter pelo menos um método marcado com o OperationContractAttribute atributo para expor qualquer funcionalidade.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. Consulte a seção de exemplos para obter um exemplo de código do uso mais simples dos dois atributos para definir e implementar um serviço.See the Examples section for a code example of the simplest use of the two attributes to define and implement a service.

Use as ServiceContractAttribute Propriedades para modificar o contrato de serviço.Use the ServiceContractAttribute properties to modify the service contract.

  • A ConfigurationName propriedade especifica o nome do elemento de serviço no arquivo de configuração a ser usado.The ConfigurationName property specifies the name of the service element in the configuration file to use.

  • As Name Namespace Propriedades e controlam o nome e o namespace do contrato no <portType> elemento wsdl.The Name and Namespace properties control the name and namespace of the contract in the WSDL <portType> element.

  • A SessionMode propriedade especifica se o contrato requer uma associação que dê suporte a sessões.The SessionMode property specifies whether the contract requires a binding that supports sessions.

  • A CallbackContract propriedade especifica o contrato de retorno em uma conversa bidirecional (duplex).The CallbackContract property specifies the return contract in a two-way (duplex) conversation.

  • As HasProtectionLevel ProtectionLevel Propriedades e indicam se todas as mensagens que dão suporte ao contrato têm um ProtectionLevel valor explícito e, nesse caso, o que é esse nível.The HasProtectionLevel and ProtectionLevel properties indicate whether all messages supporting the contract have a explicit ProtectionLevel value, and if so, what that level is.

Os serviços implementam contratos de serviço, que representam a troca de dados à qual um tipo de serviço dá suporte.Services implement service contracts, which represent the data exchange that a service type supports. Uma classe de serviço pode implementar um contrato de serviço (implementando uma interface marcada com ServiceContractAttribute que tem métodos marcados com OperationContractAttribute ) ou pode ser marcada com o ServiceContractAttribute e aplicar o OperationContractAttribute atributo a seus próprios métodos.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. (Se uma classe implementar uma interface marcada com ServiceContractAttribute , ela não poderá ser marcada com ServiceContractAttribute .) Métodos em tipos de serviço que são marcados com o OperationContractAttribute são tratados como parte de um contrato de serviço padrão especificado pelo próprio tipo de serviço.(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. Para obter detalhes sobre as operações de serviço, consulte OperationContractAttribute .For details about service operations, see OperationContractAttribute.

Por padrão, as Name Namespace Propriedades e são o nome do tipo de contrato e http://tempuri.org , respectivamente, e ProtectionLevel são 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. É recomendável que os contratos de serviço definam explicitamente seus nomes, namespaces e níveis de proteção usando essas propriedades.It is recommended that service contracts explicitly set their names, namespaces, and protection levels using these properties. Fazer isso realiza duas metas.Doing so accomplishes two goals. Primeiro, ele cria um contrato que não está conectado diretamente às informações de tipo gerenciado, permitindo que você refatore o código gerenciado e os namespaces sem interromper o contrato conforme ele é expresso em 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. Em segundo lugar, exigir explicitamente um determinado nível de proteção no próprio contrato permite que o tempo de execução valide se a configuração de ligação dá suporte a esse nível de segurança, impedindo que configurações inadequadas exponham informações confidenciais.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. Para obter mais informações sobre níveis de proteção, consulte noções básicas sobre nível de proteção.For more information about protection levels, see Understanding Protection Level.

Para expor um serviço para uso por aplicativos cliente, crie um aplicativo host para registrar seu ponto de extremidade de serviço com o 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). Você pode hospedar serviços WCF usando o WAS (serviços de ativação do Windows), em aplicativos de console, aplicativos de serviço do Windows, aplicativos do ASP.NET, aplicativos de Windows Forms ou qualquer outro tipo de domínio de aplicativo.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.

A hospedagem no era muito semelhante à criação de um aplicativo ASP.NET.Hosting in the WAS is very similar to creating an ASP.NET application. Para obter detalhes, consulte como hospedar um serviço WCF no IIS.For details, see How to: Host a WCF Service in IIS.

Os clientes também usam a interface de contrato de serviço (a interface marcada com ServiceContractAttribute) para criar um canal para o serviço ou eles usam os objetos de cliente (que combine as informações de tipo da interface do contrato de serviço com o ClientBase<TChannel> classe) para se comunicar com seu serviço.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. Para obter detalhes sobre os canais de cliente aos serviços, consulte a ChannelFactory<TChannel> classe e visão geral do cliente WCF.For details on client channels to services, see the ChannelFactory<TChannel> class and WCF Client Overview.

Usando um ServiceContractAttribute classe ou interface para herdar de outro ServiceContractAttribute classe ou interface estende o contrato do pai.Using a ServiceContractAttribute class or interface to inherit from another ServiceContractAttribute class or interface extends the parent contract. Por exemplo, se um IChildContract interface é marcado com ServiceContractAttribute e herdada de outra interface de contrato de serviço IParentContract, o IChildContract contrato de serviço contém os métodos de ambos IParentContract e 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. A extensão de contratos (seja em classes ou interfaces) é muito semelhante à extensão de classes e interfaces gerenciadas.Extending contracts (whether on classes or interfaces) is very similar to extending managed classes and interfaces.

A abordagem mais flexível para criar serviços é definir as interfaces de contrato de serviço primeiro e, em seguida, fazer com que sua classe de serviço Implemente essa interface.The most flexible approach to creating services is to define service contract interfaces first and then have your service class implement that interface. (Essa também é a maneira mais simples de criar seus serviços se você precisar implementar contratos de serviço que foram definidos por outros.) Criando serviços diretamente, marcando uma classe com ServiceContractAttribute e seus métodos com OperationContractAttribute o funciona quando o serviço expõe apenas um contrato (mas esse contrato pode ser exposto por mais de um ponto de extremidade).(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).

Use a CallbackContract propriedade para indicar outro contrato de serviço que, quando associado ao contrato de serviço original, defina uma troca de mensagens que possa fluir de duas maneiras de forma independente.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. Para obter detalhes, consulte CallbackContract.For details, see CallbackContract.

Construtores

ServiceContractAttribute()

Inicializa uma nova instância da classe ServiceContractAttribute.Initializes a new instance of the ServiceContractAttribute class.

Propriedades

CallbackContract

Obtém ou define o tipo de contrato de retorno de chamada quando o contrato é do tipo duplex.Gets or sets the type of callback contract when the contract is a duplex contract.

ConfigurationName

Obtém ou define o nome usado para localizar o serviço em um arquivo de configuração do aplicativo.Gets or sets the name used to locate the service in an application configuration file.

HasProtectionLevel

Obtém um valor que indica se o membro tem um nível de proteção atribuído.Gets a value that indicates whether the member has a protection level assigned.

Name

Obtém ou define o nome do elemento <portType> na linguagem WSDL.Gets or sets the name for the <portType> element in Web Services Description Language (WSDL).

Namespace

Obtém ou define o namespace do elemento <portType> na linguagem WSDL.Gets or sets the namespace of the <portType> element in Web Services Description Language (WSDL).

ProtectionLevel

Especifica se a associação para o contrato deve oferecer suporte ao valor da propriedade ProtectionLevel.Specifies whether the binding for the contract must support the value of the ProtectionLevel property.

SessionMode

Obtém ou define se as sessões são permitidas, não são permitidas ou são necessárias.Gets or sets whether sessions are allowed, not allowed or required.

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.Returns the hash code for this instance.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.Maps a set of names to a corresponding set of dispatch identifiers.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.Provides access to properties and methods exposed by an object.

(Herdado de Attribute)

Aplica-se a

Confira também