ServiceContractAttribute Osztály

Definíció

Azt jelzi, hogy egy interfész vagy osztály szolgáltatási szerződést határoz meg egy Windows kommunikációs alaprendszer (WCF) alkalmazásban.

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
Öröklődés
ServiceContractAttribute
Attribútumok

Példák

Az alábbi példakód bemutatja, hogyan alkalmazhatja a ServiceContractAttribute felületet egy szolgáltatási szerződés meghatározására egy szolgáltatásmódszerrel, amelyet a OperationContractAttribute. Ebben az esetben az összes üzenet kötéseinek védelmi szintje a ProtectionLevel.EncryptAndSignkövetkező.

A példakód ezt követően implementálja a szerződést az SampleService osztályban.

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

Az alábbi példakód egy egyszerű konfigurációs fájlt mutat be az előző szolgáltatáshoz, amely egy végpontot hoz létre.

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

Az alábbi példakód egy egyszerű ügyfelet mutat be, amely meghívja az előzőt 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

Megjegyzések

Szolgáltatásszerződés definiálásához használja az ServiceContractAttribute attribútumot egy interfészen (vagy osztályon). Ezután használja az OperationContractAttribute attribútumot az osztály (vagy interfész) egy vagy több metódusán a szerződés szolgáltatási műveleteinek meghatározásához. Amikor a szolgáltatási szerződést implementálják, és összekapcsolják egy kötéssel és egy EndpointAddress objektummal, a szolgáltatásszerződés elérhető lesz az ügyfelek számára. A folyamat egyszerű példákon keresztüli áttekintéséhez tekintse meg az Első lépések oktatóanyagot. A szolgáltatási szerződések létrehozásáról további információt a Szolgáltatások tervezése és megvalósítása című témakörben talál.

Az egy ServiceContractAttribute és annak felülete által kifejezett információk lazán kapcsolódnak a Web Services Description Language (WSDL) <portType> elemhez. A szolgáltatásoldalon szolgáltatási szerződéssel adhatja meg, hogy a szolgáltatás végpontja mit tesz elérhetővé a hívók számára. Az ügyféloldalon arra is használatos, hogy meghatározza annak a végpontnak a szerződését, amellyel az ügyfél kommunikál, és kétoldalas szerződések esetén megadhatja azt a visszahívási szerződést (a CallbackContract tulajdonság használatával), amelyet az ügyfélnek végre kell hajtania a kétoldalas beszélgetésben való részvételhez.

Note

A dekorált ServiceContractAttribute felületnek vagy osztálynak rendelkeznie kell legalább egy, az attribútummal jelölt metódussal, OperationContractAttribute hogy bármilyen funkciót elérhetővé tegyen. Tekintse meg a Példák szakaszt, amely a két attribútum legegyszerűbb használatát szemlélteti egy szolgáltatás definiálásához és implementálásához.

ServiceContractAttribute A tulajdonságok használatával módosíthatja a szolgáltatási szerződést.

  • A ConfigurationName tulajdonság megadja a használni kívánt konfigurációs fájl szolgáltatáselemének nevét.

  • Name A Namespace WSDL <portType> elemben a szerződés nevét és névterét a tulajdonságok és a tulajdonságok szabályozzák.

  • A SessionMode tulajdonság azt határozza meg, hogy a szerződéshez szükség van-e munkameneteket támogató kötésre.

  • A CallbackContract tulajdonság kétirányú (kétirányú) beszélgetésben adja meg a visszatérési szerződést.

  • A HasProtectionLevel tulajdonságok jelzik ProtectionLevel , hogy a szerződést támogató összes üzenet rendelkezik-e explicit ProtectionLevel értékkel, és ha igen, akkor mi az a szint.

A szolgáltatások szolgáltatási szerződéseket implementálnak, amelyek azt az adatcserét képviselik, amelyet egy szolgáltatástípus támogat. A szolgáltatásosztályok megvalósíthatnak egy szolgáltatási szerződést (egy olyan felület implementálásával ServiceContractAttribute , amelyen metódusok vannak megjelölve OperationContractAttribute), vagy megjelölhetők az ServiceContractAttribute attribútummal, és alkalmazhatják az attribútumot a OperationContractAttribute saját metódusaikra. (Ha egy osztály olyan felületet valósít meg, amellyel ServiceContractAttributemegjelölve van, nem jelölhető ServiceContractAttributemeg .) A szolgáltatástípussal OperationContractAttribute megjelölt szolgáltatástípusok metódusai a szolgáltatástípus által megadott alapértelmezett szolgáltatási szerződés részeként lesznek kezelve. A szolgáltatásműveletekkel kapcsolatos részletekért lásd: OperationContractAttribute.

Alapértelmezés szerint az és Name a Namespace tulajdonságok a szerződéstípus http://tempuri.orgneve, ProtectionLevelProtectionLevel.Noneilletve az . Javasoljuk, hogy a szolgáltatásszerződések ezen tulajdonságok használatával explicit módon állítsák be a nevüket, a névtereiket és a védelmi szintjüket. Ezzel két célt ér el. Először is létrehoz egy szerződést, amely nem kapcsolódik közvetlenül a felügyelt típusú adatokhoz, lehetővé téve a felügyelt kód és névterek újrabontását anélkül, hogy megszegi a szerződést a WSDL-ben kifejezve. Másodszor, a szerződés bizonyos szintű védelmének kifejezett megkövetelése lehetővé teszi a futtatókörnyezet számára annak ellenőrzését, hogy a kötési konfiguráció támogatja-e ezt a biztonsági szintet, megakadályozva, hogy a rossz konfiguráció bizalmas információkat adjon ki. A védelmi szintekről további információt a Védelmi szint ismertetése című témakörben talál.

Ha elérhetővé szeretne tenni egy szolgáltatást az ügyfélalkalmazások számára, hozzon létre egy gazdaalkalmazást, amely regisztrálja a szolgáltatásvégpontot a Windows kommunikációs alaprendszer (WCF) használatával. A WCF-szolgáltatásokat Windows Aktiválási szolgáltatások (WAS) használatával, konzolalkalmazásokban, Windows szolgáltatásalkalmazásokban, ASP.NET alkalmazásokban, Windows Forms alkalmazásokban vagy bármilyen más típusú alkalmazástartományban üzemeltetheti.

A WAS-ban való üzemeltetés nagyon hasonlít egy ASP.NET alkalmazás létrehozásához. További részletekért lásd: WCF-szolgáltatás üzemeltetve az IIS-ben.

Az ügyfelek vagy a szolgáltatási szerződés felületét (a megjelölt ServiceContractAttributefelületet) használják a szolgáltatáshoz tartozó csatorna létrehozásához, vagy az ügyfélobjektumokat használják (amelyek a szolgáltatási szerződés felületének típusadatait kombinálják az osztálysal) a ClientBase<TChannel> szolgáltatással való kommunikációhoz. A szolgáltatások ügyfélcsatornáinak részleteiért lásd az osztályt és a ChannelFactory<TChannel>WCF-ügyfél áttekintését.

Ha egy osztályt ServiceContractAttribute vagy felületet használ egy másik ServiceContractAttribute osztálytól vagy felülettől való öröklődéshez, meghosszabbítja a szülőszerződést. Ha például egy IChildContract felületet egy másik szolgáltatási szerződés felületével ServiceContractAttribute jelölnek meg és örökölnek, IParentContracta IChildContract szolgáltatási szerződés mindkét IParentContract és IChildContract. A szerződések kiterjesztése (akár osztályokon, akár interfészeken) nagyon hasonló a felügyelt osztályok és interfészek kiterjesztéséhez.

A szolgáltatások létrehozásának legrugalmasabb módszere a szolgáltatásszerződési felületek definiálása, majd a szolgáltatásosztály implementálása. (Ez a legegyszerűbb módja a szolgáltatások kiépítésének is, ha olyan szolgáltatási szerződéseket kell megvalósítania, amelyeket mások definiáltak.) A szolgáltatások közvetlenül úgy építhetők ki, hogy megjelölnek egy osztályt ServiceContractAttribute és annak metódusait, OperationContractAttribute ha a szolgáltatás csak egy szerződést tesz közzé (de a szerződés több végponttal is elérhető).

CallbackContract A tulajdonsággal jelezhet egy másik szolgáltatási szerződést, amely az eredeti szolgáltatási szerződéssel együtt meghatároz egy üzenetcserét, amely egymástól függetlenül két módon áramolhat. További részletekért lásd: CallbackContract.

Konstruktorok

Name Description
ServiceContractAttribute()

Inicializálja a ServiceContractAttribute osztály új példányát.

Tulajdonságok

Name Description
CallbackContract

Lekéri vagy beállítja a visszahívási szerződés típusát, ha a szerződés kétoldalas szerződés.

ConfigurationName

Lekéri vagy beállítja a szolgáltatás alkalmazáskonfigurációs fájlban való megkereséséhez használt nevet.

HasProtectionLevel

Olyan értéket kap, amely jelzi, hogy a tag rendelkezik-e hozzárendelt védelmi szinttel.

Name

Lekéri vagy beállítja az elem nevét a <portType> Web Services Description Language (WSDL) alkalmazásban.

Namespace

Lekéri vagy beállítja az elem névterét a <portType> Web Services Description Language (WSDL) alkalmazásban.

ProtectionLevel

Megadja, hogy a szerződés kötésének támogatnia kell-e a ProtectionLevel tulajdonság értékét.

SessionMode

Lekérdezi vagy beállítja, hogy a munkamenetek engedélyezettek, nem engedélyezettek vagy kötelezőek-e.

TypeId

Ha származtatott osztályban implementálják, ehhez egy egyedi azonosítót Attributekap.

(Öröklődés forrása Attribute)

Metódusok

Name Description
Equals(Object)

Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal.

(Öröklődés forrása Attribute)
GetHashCode()

A példány kivonatkódját adja vissza.

(Öröklődés forrása Attribute)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
IsDefaultAttribute()

Ha egy származtatott osztályban felül van bírálva, azt jelzi, hogy a példány értéke-e a származtatott osztály alapértelmezett értéke.

(Öröklődés forrása Attribute)
Match(Object)

Származtatott osztály felülírásakor egy olyan értéket ad vissza, amely jelzi, hogy ez a példány egy adott objektummal egyenlő-e.

(Öröklődés forrása Attribute)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

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

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása Attribute)

A következőre érvényes:

Lásd még