Aracılığıyla paylaş


ServiceContractAttribute Sınıf

Tanım

Bir arabirimin veya sınıfın Bir 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, AllowMultiple=false, 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ğinde, bir uç nokta oluşturan önceki hizmet için basit bir yapılandırma dosyası gösterilmektedir.

<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 Bağlamalar ve bir nesneyle birleştirildiğinde EndpointAddress , 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 çağıranlara 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 belirtmek 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ği kullanarak) belirtmek için de kullanılır.

Uyarı

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şaretlenen hizmet türleri üzerindeki yöntemler, hizmet türünün kendisi tarafından belirtilen varsayılan bir hizmet sözleşmesinin parçası olarak değerlendirilir. Hizmet işlemleri hakkında ayrıntılı bilgi için bkz OperationContractAttribute. .

Varsayılan olarak ve Namespace özellikleri, Name sırasıyla ve sözleşme türünün http://tempuri.orgadıdır ve ProtectionLevel şeklindedirProtectionLevel.None. Hizmet sözleşmelerinin bu özellikleri kullanarak adlarını, ad alanlarını ve koruma düzeylerini 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. İkinci olarak, açıkça sözleşmenin kendisinde belirli bir koruma düzeyi gerektiren çalışma zamanı, 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) kaydetmek üzere bir konak uygulaması oluşturun. WCF hizmetlerini windows etkinleştirme hizmetleri (WAS) kullanarak konsol uygulamalarında, Windows Hizmeti uygulamalarında, ASP.NET uygulamalarında, Windows Forms uygulamalarında veya başka herhangi bir uygulama etki alanında 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 hizmete 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 bkz. sınıfa ve WCF İstemcisineChannelFactory<TChannel> Genel Bakış.

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şaretlenir ve başka bir hizmet sözleşmesi arabiriminden devralınırsa, IParentContractIChildContract hizmet 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ıdır. (Bu, başkaları tarafından tanımlanan hizmet sözleşmelerini uygulamanız gerekiyorsa hizmetlerinizi oluşturmanın en basit yoludur.) 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ı ServiceContractAttribute ile 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 akabilen 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

Name Description
ServiceContractAttribute()

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

Özellikler

Name Description
CallbackContract

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

ConfigurationName

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

HasProtectionLevel

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

Name

Web Hizmetleri Açıklama Dili'ndeki (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

Name Description
Equals(Object)

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

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

Bu örneğin karma kodunu döndürür.

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

Geçerli örneğin Type 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 Objectbasit bir kopyasını oluşturur.

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

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

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

Name Description
_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 kullanıma sunulan özelliklere ve yöntemlere erişim sağlar.

(Devralındığı yer: Attribute)

Şunlara uygulanır

Ayrıca bkz.