ServiceContractAttribute Třída

Definice

Označuje, že rozhraní nebo třída definuje kontrakt služby v aplikaci 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, Inherited=false)]
public sealed class ServiceContractAttribute : 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
Dědičnost
ServiceContractAttribute
Atributy

Příklady

Následující příklad kódu ukazuje, jak použít na ServiceContractAttribute rozhraní definovat kontrakt služby s jednou metodou služby označenou .OperationContractAttribute V tomto případě je úroveň ochrany vyžadovaná vazbami pro všechny zprávy ProtectionLevel.EncryptAndSign.

Příklad kódu pak implementuje tento kontrakt do SampleService třídy.

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

Následující příklad kódu ukazuje jednoduchý konfigurační soubor pro předchozí službu, která vytvoří jeden koncový bod.

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

Následující příklad kódu ukazuje jednoduchého klienta, který vyvolá předchozí 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

Poznámky

Pomocí atributu ServiceContractAttribute v rozhraní (nebo třídě) definujte kontrakt služby. Pak pomocí OperationContractAttribute atributu u jedné nebo více metod třídy (nebo rozhraní) definujte operace služby kontraktu. Pokud je kontrakt služby implementován a kombinován s vazbami a EndpointAddress objektem, je kontrakt služby vystaven pro použití klienty. Přehled procesu pomocí jednoduchých příkladů najdete v tématu Začínáme Kurz. Další informace o vytváření kontraktů služeb naleznete v tématu Návrh a implementace služeb.

Informace vyjádřené ServiceContractAttribute a jeho rozhraní volně souvisí s elementem WSDL (Web Services Description Language). <portType> Kontrakt služby se používá na straně služby k určení toho, co koncový bod služby zveřejňuje volajícím. Používá se také na straně klienta k určení kontraktu koncového bodu, se kterým klient komunikuje, a v případě duplexních kontraktů určit kontrakt zpětného volání (pomocí CallbackContract vlastnosti), který musí klient implementovat, aby se mohl účastnit duplexní konverzace.

Poznámka

Rozhraní nebo třída, která je zdobena ServiceContractAttribute také musí mít alespoň jednu metodu označenou atributem OperationContractAttribute , aby se zpřístupnily všechny funkce. V části Příklady najdete příklad kódu nejjednoduššího použití dvou atributů k definování a implementaci služby.

ServiceContractAttribute Vlastnosti použijte k úpravě kontraktu služby.

  • Vlastnost ConfigurationName určuje název prvku služby v konfiguračním souboru, který se má použít.

  • Vlastnosti Name Namespace řídí název a obor názvů kontraktu v elementu WSDL <portType> .

  • Vlastnost SessionMode určuje, zda kontrakt vyžaduje vazbu, která podporuje relace.

  • Vlastnost CallbackContract určuje zpáteční kontrakt v obousměrné (duplexní) konverzaci.

  • Vlastnosti HasProtectionLevel označují ProtectionLevel , jestli všechny zprávy podporující kontrakt mají explicitní ProtectionLevel hodnotu, a pokud ano, jaká je tato úroveň.

Služby implementují kontrakty služeb, které představují výměnu dat, kterou typ služby podporuje. Třída služby může implementovat kontrakt služby (implementací rozhraní označeného ServiceContractAttribute pomocí metod označených OperationContractAttribute) nebo může být označena ServiceContractAttribute pomocí a použít OperationContractAttribute atribut na vlastní metody. (Pokud třída implementuje rozhraní označené ServiceContractAttribute, nemůže být sám označen ServiceContractAttribute.) Metody pro typy služeb, které jsou označené pomocí, OperationContractAttribute jsou považovány za součást výchozího servisního kontraktu určeného samotným typem služby. Podrobnosti o operacích služby najdete v tématu OperationContractAttribute.

Ve výchozím nastavení Name jsou vlastnosti Namespace název typu kontraktu a http://tempuri.orgv uvedeném pořadí a ProtectionLevel je ProtectionLevel.None. Doporučujeme, aby kontrakty služeb explicitně nastavovaly názvy, obory názvů a úrovně ochrany pomocí těchto vlastností. Tím dosáhnete dvou cílů. Nejprve sestaví kontrakt, který není přímo připojený k informacím o spravovaném typu, což vám umožní refaktorovat spravovaný kód a obory názvů bez přerušení kontraktu, jak je vyjádřeno ve WSDL. Za druhé, explicitně vyžadování určité úrovně ochrany u samotné smlouvy umožňuje modulu runtime ověřit, zda konfigurace vazby podporuje danou úroveň zabezpečení, což brání špatné konfiguraci v zveřejnění citlivých informací. Další informace o úrovních ochrany najdete v tématu Principy úrovně ochrany.

Pokud chcete zpřístupnit službu pro použití klientskými aplikacemi, vytvořte hostitelskou aplikaci pro registraci koncového bodu služby ve službě Windows Communication Foundation (WCF). Služby WCF můžete hostovat pomocí aktivačních služeb Windows (WAS), v konzolových aplikacích, aplikacích Windows služby, ASP.NET aplikacích, model Windows Forms aplikacích nebo v jakékoli jiné doméně aplikace.

Hostování ve WAS je velmi podobné vytvoření ASP.NET aplikace. Podrobnosti najdete v tématu Postupy: Hostování služby WCF ve službě IIS.

Klienti buď používají rozhraní kontraktu služby (rozhraní označené ServiceContractAttribute) k vytvoření kanálu ke službě, nebo používají klientské objekty (které kombinují informace o typu rozhraní kontraktu služby s třídou) ke komunikaci s vaší službou ClientBase<TChannel> . Podrobnosti o klientských kanálech ke službám najdete v přehledu ChannelFactory<TChannel> třídy a klienta WCF.

ServiceContractAttribute Použití třídy nebo rozhraní k dědění z jiné ServiceContractAttribute třídy nebo rozhraní rozšiřuje nadřazený kontrakt. Pokud je například IChildContract rozhraní označeno ServiceContractAttribute a zděděno z jiného rozhraní kontraktu služby, IChildContract IParentContractobsahuje kontrakt služby metody obou IParentContract a IChildContract. Rozšíření kontraktů (ať už na třídách nebo rozhraních) je velmi podobné rozšíření spravovaných tříd a rozhraní.

Nejflexibilnějším přístupem k vytváření služeb je nejprve definovat rozhraní kontraktů služeb a pak tuto třídu služby implementovat. (Toto je také nejjednodušší způsob, jak vytvořit služby, pokud musíte implementovat kontrakty služeb, které definovali ostatní.) Vytváření služeb přímo označením třídy ServiceContractAttribute a jeho metodami funguje OperationContractAttribute , když služba zveřejňuje pouze jeden kontrakt (ale tento kontrakt může být vystaven více než jedním koncovým bodem).

CallbackContract Vlastnost použijte k označení jiného servisního kontraktu, který při vazbě s původním kontraktem služby definuje výměnu zpráv, která může tok provést dvěma způsoby nezávisle. Podrobnosti najdete v tématu CallbackContract.

Konstruktory

ServiceContractAttribute()

Inicializuje novou instanci ServiceContractAttribute třídy.

Vlastnosti

CallbackContract

Získá nebo nastaví typ zpětného volání kontrakt, pokud je kontrakt duplexní kontrakt.

ConfigurationName

Získá nebo nastaví název použitý k vyhledání služby v konfiguračním souboru aplikace.

HasProtectionLevel

Získá hodnotu, která označuje, zda má člen přiřazenou úroveň ochrany.

Name

Získá nebo nastaví název elementu <portType> ve wsDL (Web Services Description Language).

Namespace

Získá nebo nastaví obor názvů elementu <portType> ve wsDL (Web Services Description Language).

ProtectionLevel

Určuje, zda vazba pro kontrakt musí podporovat hodnotu ProtectionLevel vlastnosti.

SessionMode

Získá nebo nastaví, zda jsou relace povoleny, nejsou povoleny nebo požadovány.

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

(Zděděno od Attribute)

Metody

Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí hodnotu hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou odvozené třídy.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu rozhraní.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

(Zděděno od Attribute)

Platí pro

Viz také