ServiceContractAttribute Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
- 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.org
v 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
IParentContract
obsahuje 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 |
Namespace |
Získá nebo nastaví obor názvů elementu |
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) |