ServiceContractAttribute Sınıf

Tanım

Bir arabirimin veya sınıfın Windows Communication Foundation (WCF) uygulamasında bir hizmet sözleşmesi tanımladığını gösterir.

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
Devralma
ServiceContractAttribute
Öznitelikler

Örnekler

Aşağıdaki kod örneği, tarafından belirtilen tek bir hizmet yöntemiyle hizmet sözleşmesi tanımlamak için arabiriminin OperationContractAttributenasıl uygulanacağını ServiceContractAttribute gösterir. Bu durumda, tüm iletiler için bağlamalar için gereken koruma düzeyi şeklindedir ProtectionLevel.EncryptAndSign.

Kod örneği daha sonra bu sözleşmeyi sınıfına SampleService uygular.

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

Aşağıdaki kod örneği, bir uç nokta oluşturan önceki hizmet için basit bir yapılandırma dosyasını gösterir.

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

Aşağıdaki kod örneği, öncekini SampleServiceçağıran basit bir istemciyi gösterir.

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

Açıklamalar

ServiceContractAttribute Hizmet sözleşmesi tanımlamak için arabiriminde (veya sınıfında) özniteliğini kullanın. Ardından, sözleşmenin OperationContractAttribute hizmet işlemlerini tanımlamak için bir veya daha fazla sınıf (veya arabirim) yönteminde özniteliğini kullanın. Hizmet sözleşmesi uygulanıp bir Bağlamalar ve bir EndpointAddress nesneyle birleştirildiğinde, hizmet sözleşmesi istemciler tarafından kullanılmak üzere kullanıma sunulur. Basit örnekleri kullanarak işleme genel bakış için bkz . Başlarken Öğreticisi. Hizmet sözleşmeleri oluşturma hakkında daha fazla bilgi için bkz. Hizmetleri Tasarlama ve Uygulama.

ve ServiceContractAttribute arabirimi tarafından ifade edilen bilgiler, Web Hizmetleri Açıklama Dili (WSDL) <portType> öğesiyle gevşek bir şekilde ilgilidir. Hizmet tarafında, hizmet uç noktasının arayanlara neleri açığa çıkaracağını belirtmek için bir hizmet sözleşmesi kullanılır. Ayrıca istemci tarafında, istemcinin iletişimde bulunduğu uç noktanın sözleşmesini ve çift yönlü anlaşmalar söz konusu olduğunda, istemcinin çift yönlü konuşmaya katılmak için uygulaması gereken geri çağırma sözleşmesini CallbackContract (özelliğini kullanarak) belirtmek için de kullanılır.

Not

ile ServiceContractAttribute dekore edilmiş bir arabirim veya sınıfın, herhangi bir işlevi kullanıma sunma amacıyla özniteliğiyle OperationContractAttribute işaretlenmiş en az bir yöntemi de olmalıdır. Bir hizmeti tanımlamak ve uygulamak için iki özniteliğin en basit kullanımına ilişkin kod örneği için Örnekler bölümüne bakın.

Hizmet sözleşmesini ServiceContractAttribute değiştirmek için özelliklerini kullanın.

  • ConfigurationName özelliği, kullanılacak yapılandırma dosyasındaki hizmet öğesinin adını belirtir.

  • Name ve Namespace özellikleri, WSDL <portType> öğesindeki sözleşmenin adını ve ad alanını denetler.

  • özelliği, SessionMode sözleşmenin oturumları destekleyen bir bağlama gerekip gerekmediğini belirtir.

  • özelliği, CallbackContract dönüş sözleşmesini iki yönlü (çift yönlü) bir konuşmada belirtir.

  • HasProtectionLevel ve ProtectionLevel özellikleri, sözleşmeyi destekleyen tüm iletilerin açık ProtectionLevel bir değere sahip olup olmadığını ve varsa bu düzeyin ne olduğunu gösterir.

Hizmetler, bir hizmet türünün desteklediği veri alışverişini temsil eden hizmet sözleşmelerini uygular. Hizmet sınıfı bir hizmet sözleşmesi uygulayabilir (ile işaretlenmiş ServiceContractAttribute yöntemleri OperationContractAttributeolan bir arabirim uygulayarak) veya ile ServiceContractAttribute işaretlenebilir ve özniteliğini kendi yöntemlerine uygulayabilir OperationContractAttribute . (Bir sınıf ile ServiceContractAttributeişaretlenmiş bir arabirim uygularsa, kendisi ile ServiceContractAttributeişaretlenemez.) ile OperationContractAttribute işaretlenmiş hizmet türlerindeki yöntemler, hizmet türünün kendisi tarafından belirtilen varsayılan hizmet sözleşmesinin bir parçası olarak kabul edilir. Hizmet işlemleri hakkında ayrıntılı bilgi için bkz OperationContractAttribute. .

Varsayılan olarak, Name ve Namespace özellikleri sırasıyla ve sözleşme türünün http://tempuri.orgadıdır ve ProtectionLevel şeklindedir ProtectionLevel.None. Hizmet sözleşmelerinin adlarını, ad alanlarını ve koruma düzeylerini bu özellikleri kullanarak açıkça ayarlaması önerilir. Bunu yapmak iki hedefe ulaşır. İlk olarak, yönetilen tür bilgilerine doğrudan bağlı olmayan bir sözleşme oluşturur ve WSDL'de ifade edildiği gibi sözleşmeyi bozmadan yönetilen kodunuzu ve ad alanlarınızı yeniden düzenlemenize olanak tanır. İkincisi, açıkça sözleşmenin kendisinde belirli bir koruma düzeyi gerektirmek, çalışma zamanının bağlama yapılandırmasının bu güvenlik düzeyini destekleyip desteklemediğini doğrulamasını sağlar ve kötü yapılandırmanın hassas bilgileri açığa çıkarmasını önler. Koruma düzeyleri hakkında daha fazla bilgi için bkz. Koruma Düzeyini Anlama.

Bir hizmeti istemci uygulamaları tarafından kullanılmak üzere kullanıma açmak için hizmet uç noktanızı Windows Communication Foundation'a (WCF) kaydedecek bir konak uygulaması oluşturun. WCF hizmetlerini konsol uygulamalarında, Windows Hizmet uygulamalarında, ASP.NET uygulamalarında, Windows Forms uygulamalarında veya başka herhangi bir uygulama etki alanında Windows Etkinleştirme Hizmetleri(WAS) kullanarak barındırabilirsiniz.

WAS'de barındırmak, ASP.NET uygulaması oluşturmaya çok benzer. Ayrıntılar için bkz . Nasıl yapılır: IIS'de WCF Hizmeti Barındırma.

İstemciler hizmette bir kanal oluşturmak için hizmet sözleşmesi arabirimini (ile ServiceContractAttributeişaretlenmiş arabirim) veya hizmetinizle iletişim kurmak için istemci nesnelerini (hizmet sözleşmesi arabiriminin tür bilgilerini sınıfla ClientBase<TChannel> birleştiren) kullanır. Hizmetlere yönelik istemci kanallarıyla ilgili ayrıntılar için sınıfa ve WCF İstemcisineChannelFactory<TChannel> Genel Bakış'a bakın.

Başka ServiceContractAttribute bir sınıftan veya arabirimden devralmak için bir ServiceContractAttribute sınıf veya arabirim kullanmak üst sözleşmeyi genişletir. Örneğin, bir IChildContract arabirim ile ServiceContractAttribute işaretlenirse ve başka bir hizmet sözleşmesi arabiriminden devralınırsa, IChildContract IParentContracthizmet sözleşmesi hem hem IChildContractde IParentContract yöntemlerini içerir. Sözleşmelerin genişletilmesi (sınıflarda veya arabirimlerde) yönetilen sınıfları ve arabirimleri genişletmeye çok benzer.

Hizmet oluşturmanın en esnek yaklaşımı, önce hizmet sözleşmesi arabirimlerini tanımlamak ve ardından hizmet sınıfınızın bu arabirimi uygulamasını sağlamaktır. (Başkaları tarafından tanımlanan hizmet sözleşmelerini uygulamanız gerekiyorsa hizmetlerinizi oluşturmanın en basit yolu da budur.) Hizmet yalnızca bir sözleşmeyi kullanıma sunduğunda (ancak bu sözleşme birden fazla uç nokta tarafından kullanıma sunulduğunda) bir sınıfı ile ServiceContractAttribute ve yöntemleriyle OperationContractAttribute işaretleyerek hizmetleri doğrudan oluşturma.

CallbackContract özgün hizmet sözleşmesiyle ilişkili olduğunda, bağımsız olarak iki şekilde akabilecek bir ileti değişimi tanımlayan başka bir hizmet sözleşmesini belirtmek için özelliğini kullanın. Ayrıntılar için bkz. CallbackContract.

Oluşturucular

ServiceContractAttribute()

ServiceContractAttribute sınıfının yeni bir örneğini başlatır.

Özellikler

CallbackContract

Sözleşme çift yönlü bir sözleşme olduğunda geri çağırma sözleşmesinin türünü alır veya ayarlar.

ConfigurationName

Bir uygulama yapılandırma dosyasında hizmeti bulmak için kullanılan adı alır veya ayarlar.

HasProtectionLevel

Üyeye atanmış bir koruma düzeyi olup olmadığını gösteren bir değer alır.

Name

Web Hizmetleri Açıklama Dili'nde (WSDL) öğenin adını <portType> alır veya ayarlar.

Namespace

Web Hizmetleri Açıklama Dili'nde (WSDL) öğenin ad alanını <portType> alır veya ayarlar.

ProtectionLevel

Sözleşme bağlamasının özelliğin değerini desteklemesi ProtectionLevel gerekip gerekmediğini belirtir.

SessionMode

Oturumlara izin verilip verilmeyeceğini veya gerekli olup olmadığını alır veya ayarlar.

TypeId

Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır.

(Devralındığı yer: Attribute)

Yöntemler

Equals(Object)

Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

(Devralındığı yer: Attribute)
GetHashCode()

Bu örneğe ilişkin karma kodu döndürür.

(Devralındığı yer: Attribute)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsDefaultAttribute()

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir.

(Devralındığı yer: Attribute)
Match(Object)

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.

(Devralındığı yer: Attribute)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

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

Bir ad kümesini karşılık gelen bir dağıtma tanımlayıcısı kümesine eşler.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Bir arabirimin tür bilgilerini almak için kullanılabilecek bir nesnenin tür bilgilerini alır.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1).

(Devralındığı yer: Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bir nesne tarafından sunulan özelliklere ve yöntemlere erişim sağlar.

(Devralındığı yer: Attribute)

Şunlara uygulanır

Ayrıca bkz.