ServiceContractAttribute Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
- Ö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.org
adı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
IParentContract
hizmet sözleşmesi hem hem IChildContract
de 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ı |
Namespace |
Web Hizmetleri Açıklama Dili'nde (WSDL) öğenin ad alanını |
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) |