ServiceContractAttribute Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
- 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 |
| Namespace |
Lekéri vagy beállítja az elem névterét a |
| 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) |