ServiceContractAttribute Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
- 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 |
| Namespace |
Hämtar eller anger namnområdet för elementet |
| 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) |