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, AllowMultiple=false, 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 ServiceContractAttribute na rozhraní definovat kontrakt služby s jednou metodou služby označenou OperationContractAttribute. V tomto případě je požadovaná úroveň ochrany vazeb pro všechny zprávy ProtectionLevel.EncryptAndSign.
Příklad kódu pak implementuje tento kontrakt ve SampleService třídě.
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í atributu OperationContractAttribute u jedné nebo více metod třídy (nebo rozhraní) definujte operace služby kontraktu. Při implementaci a kombinaci kontraktu služby s vazbami a EndpointAddress objektem je kontrakt služby zpřístupněn pro použití klienty. Přehled procesu pomocí jednoduchých příkladů najdete v kurzu Začínáme. 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ů k určení kontraktu zpětného CallbackContract volání (pomocí 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 OperationContractAttribute atributem, aby bylo možné zveřejnit všechny funkce. V části Příklady najdete příklad kódu nejjednoduššího použití těchto dvou atributů k definování a implementaci služby.
ServiceContractAttribute Ke změně kontraktu služby použijte vlastnosti.
Vlastnost ConfigurationName určuje název prvku služby v konfiguračním souboru, který se má použít.
Namespace Vlastnosti Name ří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.
ProtectionLevel Vlastnosti HasProtectionLevel označují, zda 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 metodou označenou OperationContractAttribute) nebo může být označena ServiceContractAttribute atributem a použít OperationContractAttribute ho 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 kontraktu služby 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ů. Za prvé vytvoří 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 na samotném kontraktu 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
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 systému Windows (WAS) v konzolových aplikacích, aplikacích služeb systému Windows, ASP.NET aplikacích, aplikacích modelu Windows Forms nebo jiném druhu domény aplikace.
Hostování v 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 ClientBase<TChannel> služby s třídou) ke komunikaci s vaší službou. Podrobnosti o klientských kanálech do služeb 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, IChildContractIParentContractobsahuje kontrakt služby metody obou IParentContract a IChildContract. Rozšíření kontraktů (ať už u tříd nebo rozhraní) je velmi podobné rozšíření spravovaných tříd a rozhraní.
Nejflexibilnější přístup 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 vytvářet služby, pokud je nutné implementovat kontrakty služeb definované jinými uživateli.) Vytváření služeb přímo označením třídy ServiceContractAttribute a jejími 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 kontraktu služby, který při vazbě s původním kontraktem služby definuje výměnu zpráv, která může tokovat dvěma způsoby nezávisle. Podrobnosti najdete v CallbackContract.
Konstruktory
| Name | Description |
|---|---|
| ServiceContractAttribute() |
Inicializuje novou instanci ServiceContractAttribute třídy. |
Vlastnosti
| Name | Description |
|---|---|
| CallbackContract |
Získá nebo nastaví typ kontraktu zpětného volání, pokud je kontrakt duplexní. |
| 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 člen má přiřazenou úroveň ochrany. |
| Name |
Získá nebo nastaví název prvku |
| Namespace |
Získá nebo nastaví obor názvů elementu |
| ProtectionLevel |
Určuje, zda vazba kontraktu 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
| Name | Description |
|---|---|
| Equals(Object) |
Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu. (Zděděno od Attribute) |
| GetHashCode() |
Vrátí kód hash pro tuto instanci. (Zděděno od Attribute) |
| GetType() |
Získá Type aktuální instance. (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 pro odvozenou třídu. (Zděděno od Attribute) |
| Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního 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í
| Name | Description |
|---|---|
| _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 pro 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) |