ServiceContractAttribute Klass

Definition

Anger att ett gränssnitt eller en klass definierar ett tjänstkontrakt i ett Windows Communication Foundation-program (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
Arv
ServiceContractAttribute
Attribut

Exempel

Följande kodexempel visar hur du tillämpar på ServiceContractAttribute ett gränssnitt för att definiera ett tjänstkontrakt med en tjänstmetod, vilket anges av OperationContractAttribute. I det här fallet är ProtectionLevel.EncryptAndSignden skyddsnivå som krävs för bindningar för alla meddelanden .

Kodexemplet implementerar sedan kontraktet för SampleService klassen.

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

I följande kodexempel visas en enkel konfigurationsfil för den föregående tjänsten som skapar en slutpunkt.

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

I följande kodexempel visas en enkel klient som anropar föregående 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

Kommentarer

ServiceContractAttribute Använd attributet i ett gränssnitt (eller en klass) för att definiera ett tjänstkontrakt. Använd OperationContractAttribute sedan attributet på en eller flera av klassmetoderna (eller gränssnittet) för att definiera kontraktets tjänståtgärder. När tjänstkontraktet implementeras och kombineras med bindningar och ett EndpointAddress objekt exponeras tjänstkontraktet för användning av klienter. En översikt över processen med enkla exempel finns i Komma igång självstudie. Mer information om hur du skapar tjänstkontrakt finns i Designa och implementera tjänster.

Informationen som uttrycks av en ServiceContractAttribute och dess gränssnitt är löst relaterad till WSDL-elementet (Web Services Description Language). <portType> Ett tjänstkontrakt används på tjänstsidan för att ange vad tjänstens slutpunkt exponerar för anropare. Det används också på klientsidan för att ange kontraktet för den slutpunkt som klienten kommunicerar med och, när det gäller duplexkontrakt, för att ange återanropskontraktet (med CallbackContract hjälp av egenskapen) som klienten måste implementera för att delta i en duplex-konversation.

Note

Ett gränssnitt eller en klass som är dekorerad med ServiceContractAttribute måste också ha minst en metod markerad med OperationContractAttribute attributet för att exponera alla funktioner. Se avsnittet Exempel för ett kodexempel på den enklaste användningen av de två attributen för att definiera och implementera en tjänst.

ServiceContractAttribute Använd egenskaperna för att ändra tjänstkontraktet.

  • Egenskapen ConfigurationName anger namnet på tjänstelementet i konfigurationsfilen som ska användas.

  • Egenskaperna Name och Namespace styr namnet och namnområdet för kontraktet i WSDL-elementet <portType> .

  • Egenskapen SessionMode anger om kontraktet kräver en bindning som stöder sessioner.

  • Egenskapen CallbackContract anger returkontraktet i en dubbelriktad konversation (duplex).

  • Egenskaperna HasProtectionLevel och ProtectionLevel anger om alla meddelanden som stöder kontraktet har ett explicit ProtectionLevel värde och i så fall vilken nivå det är.

Tjänsterna implementerar tjänstkontrakt som representerar det datautbyte som en tjänsttyp stöder. En tjänstklass kan implementera ett tjänstkontrakt (genom att implementera ett gränssnitt markerat med ServiceContractAttribute som har metoder markerade med OperationContractAttribute) eller markeras med ServiceContractAttribute och tillämpa OperationContractAttribute attributet på sina egna metoder. (Om en klass implementerar ett gränssnitt markerat med ServiceContractAttributekan den inte markeras med ServiceContractAttribute.) Metoder för tjänsttyper som är markerade med OperationContractAttribute behandlas som en del av ett standardtjänstkontrakt som anges av själva tjänsttypen. Mer information om tjänståtgärder finns i OperationContractAttribute.

Som standard Name är egenskaperna och Namespace namnet på kontraktstypen respektive http://tempuri.orgoch ProtectionLevel är ProtectionLevel.None. Vi rekommenderar att tjänstkontrakt uttryckligen anger sina namn, namnområden och skyddsnivåer med hjälp av dessa egenskaper. Att göra det åstadkommer två mål. Först skapar det ett kontrakt som inte är direkt anslutet till den hanterade typen information, så att du kan omstrukturera din hanterade kod och namnområden utan att bryta kontraktet som det uttrycks i WSDL. För det andra innebär uttryckligen krav på en viss skyddsnivå för själva kontraktet att körningen kan verifiera om bindningskonfigurationen stöder den säkerhetsnivån, vilket förhindrar att dålig konfiguration exponerar känslig information. Mer information om skyddsnivåer finns i Förstå skyddsnivå.

Om du vill exponera en tjänst för användning av klientprogram skapar du ett värdprogram för att registrera tjänstslutpunkten med Windows Communication Foundation (WCF). Du kan vara värd för WCF-tjänster med hjälp av Windows Activation Services (WAS), i konsolprogram, Windows Tjänstprogram, ASP.NET program, Windows Forms program eller någon annan typ av programdomän.

Värdtjänster i WAS liknar att skapa ett ASP.NET program. Mer information finns i Så här: Värd för en WCF-tjänst i IIS.

Klienter använder antingen tjänstkontraktsgränssnittet (gränssnittet markerat med ServiceContractAttribute) för att skapa en kanal till tjänsten eller så använder de klientobjekten (som kombinerar typinformationen i tjänstkontraktsgränssnittet med ClientBase<TChannel> klassen) för att kommunicera med din tjänst. Mer information om klientkanaler till tjänster finns i ChannelFactory<TChannel> klassen och WCF-klientöversikten.

Om du använder en klass eller ett ServiceContractAttribute gränssnitt för att ärva från en annan klass eller ett annat ServiceContractAttribute gränssnitt utökas det överordnade kontraktet. Om ett IChildContract gränssnitt till exempel har markerats med ServiceContractAttribute och ärvts från ett annat tjänstkontraktsgränssnitt IParentContractIChildContractinnehåller tjänstkontraktet metoderna för både IParentContract och IChildContract. Att utöka kontrakt (oavsett om det gäller klasser eller gränssnitt) är mycket likt att utöka hanterade klasser och gränssnitt.

Den mest flexibla metoden för att skapa tjänster är att först definiera tjänstkontraktsgränssnitt och sedan låta tjänstklassen implementera det gränssnittet. (Det här är också det enklaste sättet att skapa dina tjänster om du måste implementera tjänstkontrakt som har definierats av andra.) Skapa tjänster direkt genom att markera en klass med ServiceContractAttribute och dess metoder med OperationContractAttribute arbeten när tjänsten endast exponerar ett kontrakt (men det kontraktet kan exponeras av mer än en slutpunkt).

CallbackContract Använd egenskapen för att ange ett annat tjänstkontrakt som, när det är bundet tillsammans med det ursprungliga tjänstkontraktet, definierar ett meddelandeutbyte som kan flöda på två sätt oberoende av varandra. Mer information finns i CallbackContract.

Konstruktorer

Name Description
ServiceContractAttribute()

Initierar en ny instans av ServiceContractAttribute klassen.

Egenskaper

Name Description
CallbackContract

Hämtar eller anger typen av återanropskontrakt när kontraktet är ett duplexkontrakt.

ConfigurationName

Hämtar eller anger namnet som används för att hitta tjänsten i en programkonfigurationsfil.

HasProtectionLevel

Hämtar ett värde som anger om medlemmen har en tilldelad skyddsnivå.

Name

Hämtar eller anger namnet på elementet <portType> i Web Services Description Language (WSDL).

Namespace

Hämtar eller anger namnområdet för elementet <portType> i Web Services Description Language (WSDL).

ProtectionLevel

Anger om bindningen för kontraktet måste ha stöd för egenskapens ProtectionLevel värde.

SessionMode

Hämtar eller anger huruvida sessioner tillåts, inte tillåts eller krävs.

TypeId

När den implementeras i en härledd klass hämtar du en unik identifierare för den här Attribute.

(Ärvd från Attribute)

Metoder

Name Description
Equals(Object)

Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt.

(Ärvd från Attribute)
GetHashCode()

Returnerar hash-koden för den här instansen.

(Ärvd från Attribute)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
IsDefaultAttribute()

När den åsidosättas i en härledd klass anger du om värdet för den här instansen är standardvärdet för den härledda klassen.

(Ärvd från Attribute)
Match(Object)

När den åsidosätts i en härledd klass returneras ett värde som anger om den här instansen är lika med ett angivet objekt.

(Ärvd från Attribute)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Explicita gränssnittsimplementeringar

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

Mappar en uppsättning namn till en motsvarande uppsättning av sändningsidentifierare.

(Ärvd från Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Hämtar typinformationen för ett objekt, som kan användas för att hämta typinformationen för ett gränssnitt.

(Ärvd från Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Hämtar antalet typinformationsgränssnitt som ett objekt tillhandahåller (antingen 0 eller 1).

(Ärvd från Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Ger åtkomst till egenskaper och metoder som exponeras av ett objekt.

(Ärvd från Attribute)

Gäller för

Se även