ServiceContractAttribute Klasse

Definition

Gibt an, dass eine Schnittstelle oder eine Klasse einen Dienstvertrag in einer WCF-Anwendung (Windows Communication Foundation) definiert.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
Vererbung
ServiceContractAttribute
Attribute

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie ServiceContractAttribute auf eine Schnittstelle angewendet wird, um einen Dienstvertrag mit einer Dienstmethode zu definieren, die durch OperationContractAttribute angegeben wird.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. In diesem Fall ist die erforderliche Schutzebene der Bindungen für alle Nachrichten ProtectionLevel.EncryptAndSign.In this case, the protection level required of bindings for all messages is ProtectionLevel.EncryptAndSign.

Im Codebeispiel wird dieser Vertrag dann über die SampleService-Klasse implementiert.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

Im folgenden Codebeispiel wird eine einfache Konfigurationsdatei für den vorangehenden Dienst gezeigt, die einen Endpunkt erstellt.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>

Im folgenden Codebeispiel wird ein einfacher Client gezeigt, der den vorangehenden SampleService aufruft.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

Hinweise

Verwenden Sie das ServiceContractAttribute-Attribut in einer Schnittstelle (oder Klasse), um einen Dienstvertrag zu definieren.Use the ServiceContractAttribute attribute on an interface (or class) to define a service contract. Verwenden Sie dann das OperationContractAttribute-Attribut in einer oder mehreren Klassenmethoden (oder Schnittstellenmethoden), um die Dienstvertragvorgänge zu definieren.Then use the OperationContractAttribute attribute on one or more of the class (or interface) methods to define the contract's service operations. Wenn der Dienstvertrag implementiert und mit einem- Bindungen und einem EndpointAddress-Objekt kombiniert wird, wird der Dienstvertrag für die Verwendung durch Clients verfügbar gemacht.When the service contract is implemented and combined with a Bindings and an EndpointAddress object, the service contract is exposed for use by clients. Eine Übersicht über den Prozess mit einfachen Beispielen finden Sie im Tutorial zuden ersten Schritten.For an overview of the process using simple examples, see Getting Started Tutorial. Weitere Informationen zum Erstellen von Dienstverträgen finden Sie unter Entwerfen und Implementieren von Diensten.For more information about creating service contracts, see Designing and Implementing Services.

Die von einem ServiceContractAttribute wiedergegebenen Informationen und seine Schnittstelle hängen lose mit dem Web Services Description Language (WSDL)-<portType>-Element zusammen.The information expressed by a ServiceContractAttribute and its interface is loosely related to the Web Services Description Language (WSDL) <portType> element. Ein Dienstvertrag wird auf der Dienst Seite verwendet, um anzugeben, was der Dienst Endpunkt für Aufrufer verfügbar macht.A service contract is used on the service side to specify what the service's endpoint exposes to callers. Er wird außerdem auf Clientseite verwendet, um den Vertrag des Endpunkts anzugeben, mit dem der Client kommuniziert, und um im Fall von Duplexverträgen den Rückrufvertrag anzugeben (unter Verwendung der CallbackContract-Eigenschaft), den der Client implementieren muss, um an einer Duplexkonversation teilzunehmen.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.

Hinweis

Eine Schnittstelle oder Klasse, der ServiceContractAttribute zugeordnet ist, muss mindestens eine Methode aufweisen, die mit dem OperationContractAttribute-Attribut markiert ist, um Funktionen bereitstellen zu können.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. Im Beispielabschnitt finden Sie ein Codebeispiel, in dem die beiden Attribute auf einfache Weise zum Definieren und Implementieren eines Diensts eingesetzt werden.See the Examples section for a code example of the simplest use of the two attributes to define and implement a service.

Verwenden Sie die ServiceContractAttribute-Eigenschaften, um den Dienstvertrag zu ändern.Use the ServiceContractAttribute properties to modify the service contract.

  • Die ConfigurationName-Eigenschaft gibt den Namen des Dienstelements in der zu verwendenden Konfigurationsdatei an.The ConfigurationName property specifies the name of the service element in the configuration file to use.

  • Die Name-Eigenschaft und die Namespace-Eigenschaft steuern den Namen und den Namespace des Vertrags im WSDL-<portType>-Element.The Name and Namespace properties control the name and namespace of the contract in the WSDL <portType> element.

  • Die SessionMode-Eigenschaft gibt an, ob der Vertrag eine Bindung erfordert, die Sitzungen unterstützt.The SessionMode property specifies whether the contract requires a binding that supports sessions.

  • Die CallbackContract-Eigenschaft gibt den Rückgabevertrag in einer bidirektionalen (Duplex-) Konversation an.The CallbackContract property specifies the return contract in a two-way (duplex) conversation.

  • Die HasProtectionLevel-Eigenschaft und die ProtectionLevel-Eigenschaft geben an, ob alle den Vertrag unterstützenden Nachrichten einen expliziten ProtectionLevel-Wert haben, und wenn ja, welcher Stufe sie angehören.The HasProtectionLevel and ProtectionLevel properties indicate whether all messages supporting the contract have a explicit ProtectionLevel value, and if so, what that level is.

Dienste implementieren Dienstverträge, die den von einem Diensttyp unterstützten Datenaustausch darstellen.Services implement service contracts, which represent the data exchange that a service type supports. Eine Dienstklasse kann einen Dienstvertrag implementieren (durch Implementierung einer mit ServiceContractAttribute markierten Schnittstelle, die Methoden aufweist, die mit OperationContractAttribute markiert sind), oder sie kann mit ServiceContractAttribute markiert werden und das OperationContractAttribute-Attribut auf seine eigenen Methoden anwenden.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. (Wenn eine Klasse eine mit ServiceContractAttribute markierte Schnittstelle implementiert, kann sie nicht ihrerseits mit ServiceContractAttribute markiert sein.) Methoden für Diensttypen, die mit OperationContractAttribute markiert sind, werden als Teil eines vom Diensttypen selbst angegebenen Standarddienstvertrags behandelt.(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. Einzelheiten zu Dienstvorgängen finden Sie unter OperationContractAttribute.For details about service operations, see OperationContractAttribute.

Standardmäßig sind die Name-Eigenschaft und die Namespace-Eigenschaft der Name des Vertragstyps bzw. http://tempuri.org, und ProtectionLevel ist 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. Es wird empfohlen, dass Dienstverträge ihre Namen, Namespaces und Schutzebenen explizit mit diesen Eigenschaften festlegen.It is recommended that service contracts explicitly set their names, namespaces, and protection levels using these properties. Dadurch können zwei Ziele erreicht werden.Doing so accomplishes two goals. Erstens wird dabei ein Vertrag erstellt, der nicht direkt mit den Informationen zum verwalteten Typ verbunden ist und es Ihnen dadurch ermöglicht, Ihren verwalteten Code und Ihre verwalteten Namespaces umzugestalten, ohne den in WSDL angegebenen Vertrag zu brechen.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. Zweitens wird der Laufzeit durch die explizite Anforderung einer bestimmten Schutzebene beim Vertrag selbst ermöglicht zu prüfen, ob die Bindungskonfiguration diese Sicherheitsebene unterstützt, wodurch verhindert wird, dass durch eine unzureichende Konfiguration vertrauliche Informationen weitergegeben werden.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. Weitere Informationen zu Schutz Ebenen finden Sie Untergrund Legendes zur Schutz Ebene.For more information about protection levels, see Understanding Protection Level.

Um einen Dienst für die Verwendung durch Client Anwendungen verfügbar zu machen, erstellen Sie eine Host Anwendung, um den Dienst Endpunkt bei Windows Communication Foundation (WCF) zu registrieren.To expose a service for use by client applications, create a host application to register your service endpoint with Windows Communication Foundation (WCF). Sie können WCF-Dienste mit Windows Activation Services (was), in Konsolen Anwendungen, Windows-Dienst Anwendungen, ASP.NET-Anwendungen, Windows Forms Anwendungen oder einer beliebigen anderen Art von Anwendungsdomäne hosten.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.

Das Hosten in WAS ähnelt stark dem Erstellen einer ASP.NET-Anwendung.Hosting in the WAS is very similar to creating an ASP.NET application. Weitere Informationen finden Sie unter [Vorgehensweise: Hosten eines WCF-Diensts in IIS @ no__t-0.For details, see How to: Host a WCF Service in IIS.

Clients verwenden entweder die Dienstvertragsschnittstelle (die mit ServiceContractAttribute markierte Schnittstelle), um einen Kanal für den Dienst zu erstellen, oder sie verwenden die Clientobjekte (die die Typinformationen der Dienstvertragsschnittstelle mit der ClientBase<TChannel>-Klasse kombinieren), um mit dem Dienst zu kommunizieren.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. Weitere Informationen zu Client Kanälen für Dienste finden Sie in der ChannelFactory<TChannel>-Klasse und in der Übersicht über den WCF-Client.For details on client channels to services, see the ChannelFactory<TChannel> class and WCF Client Overview.

Durch Verwendung einer ServiceContractAttribute-Klasse oder -Schnittstelle zum Erben von einer anderen ServiceContractAttribute-Klasse oder -Schnittstelle wird der übergeordnete Vertrag erweitert.Using a ServiceContractAttribute class or interface to inherit from another ServiceContractAttribute class or interface extends the parent contract. Wenn z.&#160;B. eine IChildContract-Schnittstelle mit ServiceContractAttribute markiert ist und von der Dienstvertragsschnittstelle IParentContracterbt, enthält der IChildContract-Dienstvertrag die Methoden von IParentContract und 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. Das Erweitern von Verträgen (ob für Klassen oder Schnittstellen) ähnelt stark dem Erweitern verwalteter Klassen und Schnittstellen.Extending contracts (whether on classes or interfaces) is very similar to extending managed classes and interfaces.

Die flexibelste Herangehensweise an das Erstellen von Diensten ist die Definition von Dienstvertragsschnittstellen und die anschließende Implementierung dieser Schnittstellen durch die Dienstklasse.The most flexible approach to creating services is to define service contract interfaces first and then have your service class implement that interface. (Dies ist auch der einfachste Weg, Dienste zu erstellen, wenn Sie Dienstverträge implementieren müssen, die von anderen definiert wurden.) Das direkte Erstellen von Diensten durch das Markieren einer Klasse mit ServiceContractAttribute und ihrer Methoden mit OperationContractAttribute funktioniert, wenn der Dienst nur einen Vertrag verfügbar macht (aber dieser Vertrag kann durch mehr als einen Endpunkt verfügbar gemacht werden).(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).

Verwenden Sie die CallbackContract-Eigenschaft, um einen anderen Dienstvertrag anzugeben, der, wenn er an den ursprünglichen Dienstvertrag gebunden ist, einen Nachrichtenaustausch definiert, der auf zwei Arten unabhängig durchlaufen werden kann.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. Ausführliche Informationen finden Sie unter CallbackContract.For details, see CallbackContract.

Konstruktoren

ServiceContractAttribute()

Initialisiert eine neue Instanz der ServiceContractAttribute-Klasse.Initializes a new instance of the ServiceContractAttribute class.

Eigenschaften

CallbackContract

Ruft den Typ des Rückrufvertrags ab oder legt ihn fest, wenn es sich beim Vertrag um einen Duplexvertrag handelt.Gets or sets the type of callback contract when the contract is a duplex contract.

ConfigurationName

Ruft den Namen ab, mit dem der Dienst in einer Anwendungskonfigurationsdatei gesucht wird, oder legt ihn fest.Gets or sets the name used to locate the service in an application configuration file.

HasProtectionLevel

Ruft einen Wert ab, der angibt, ob dem Member eine Schutzebene zugewiesen wurde.Gets a value that indicates whether the member has a protection level assigned.

Name

Ruft den Namen für das <portType>-Element in Web Services Description Language (WSDL) ab oder legt ihn fest.Gets or sets the name for the <portType> element in Web Services Description Language (WSDL).

Namespace

Ruft den Namespace des <portType>-Elements in der Web Services Description Language (WSDL) ab oder legt ihn fest.Gets or sets the namespace of the <portType> element in Web Services Description Language (WSDL).

ProtectionLevel

Gibt an, ob die Bindung für den Vertrag den Wert der ProtectionLevel-Eigenschaft unterstützen muss.Specifies whether the binding for the contract must support the value of the ProtectionLevel property.

SessionMode

Ruft ab, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind, oder legt dies fest.Gets or sets whether sessions are allowed, not allowed or required.

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.When implemented in a derived class, gets a unique identifier for this Attribute.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.Returns a value that indicates whether this instance is equal to a specified object.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.Returns the hash code for this instance.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

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

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.Maps a set of names to a corresponding set of dispatch identifiers.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.Provides access to properties and methods exposed by an object.

(Geerbt von Attribute)

Gilt für:

Siehe auch