IContractBehavior Arabirim
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.
Hizmet veya istemci uygulamasındaki bir sözleşmenin çalışma zamanı davranışını genişletmek için kullanılabilecek yöntemler uygular.
public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
- Türetilmiş
Örnekler
Aşağıdaki kod örneği, "tekil" bir davranış sağlayan adlı ObjectProviderBehavior özel IInstanceProvider bir uygulama olduğunu varsayar; her zaman aynı hizmet örneğini döndürür ve geri dönüştürmez.
Örnek sağlayıcısı özelleştirmesini eklemek için örnekte, özel hizmet örneği sağlayıcısını eklemek için uygulayan bir özel özniteliğin (SingletonBehaviorAttribute) nasıl uygulandığı IContractBehavior gösterilmektedir. Ayrıca IContractBehaviorAttribute, kullanımını sözleşmeye ISampleService bağlayan uygular.
public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{
#region IContractBehaviorAttribute Members
public Type TargetContract
{
get { return typeof(ISampleService); }
}
#endregion
#region IContractBehavior Members
public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
{
return;
}
public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
return;
}
public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
{
dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
}
public void Validate(ContractDescription description, ServiceEndpoint endpoint)
{
return;
}
#endregion
}
Public Class SingletonBehaviorAttribute
Inherits Attribute
Implements IContractBehaviorAttribute, IContractBehavior
#Region "IContractBehaviorAttribute Members"
Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
Get
Return GetType(ISampleService)
End Get
End Property
#End Region
#Region "IContractBehavior Members"
Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
Return
End Sub
Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
Return
End Sub
Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
End Sub
Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
Return
End Sub
#End Region
End Class
Açıklamalar
Uygulama düzeyinde sözleşme genelinde yürütmenin IContractBehavior bazı yönlerini değiştirmek, incelemek veya genişletmek için arabirimini uygulayın. ve IEndpointBehavior nesnelerden farklı olarakIServiceBehavior, IContractBehavior nesneler uygulama yapılandırma dosyası kullanılarak çalışma zamanına eklenemez; yalnızca program aracılığıyla veya öznitelik kullanılarak eklenebilir.
Hizmet, uç nokta ve sözleşme davranışları arasında seçim yapma hakkında daha fazla bilgi için bkz. Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
AddBindingParameters Davranışı desteklemek üzere özel verilerle bağlama öğeleri sağlamak için yöntemini kullanın.
İstemci uygulamasındaki ApplyClientBehavior bir sözleşmenin uzantılarını değiştirmek, incelemek veya eklemek için yöntemini kullanın.
Hizmet uygulamasındaki ApplyDispatchBehavior bir sözleşmenin uzantılarını değiştirmek, incelemek veya eklemek için yöntemini kullanın.
Bir sözleşmenin Validate belirli bir özelliği desteklediğinden emin olmak için yöntemini kullanın.
IContractBehavior nesneler bu yöntemlerden herhangi birini kullanabilir, ancak genellikle yalnızca biri önemlidir; bu gibi durumlarda, kullanılmayan yöntemler herhangi bir değer olmadan döndürülebilir.
Uyarı
IContractBehavior Tüm yöntemler ve System.ServiceModel.Description.ServiceEndpoint parametrelerini geçirirSystem.ServiceModel.Description.ContractDescription. Bu parametreler inceleme içindir; nesneleri değiştirirseniz yürütme davranışı tanımlanmamış olur.
IContractBehavior türleri hizmette veya istemcide ya da her ikisinde de kullanılabilir. Hizmette özelleştirme görevi gerçekleştirmek için, IContractBehavior nesnenin hizmet çalışma zamanının oluşturulmasından önce özelliğine Behaviors eklenmesi gerekir. Bu, nesnede System.ServiceModel.ServiceHost yöntem çağrıldığında ICommunicationObject.Open gerçekleşir. Bunu yapmanın iki yolu vardır.
İlk yöntem, yöntemin nesne üzerinde çağrıldığı ICommunicationObject.Open noktadan önce özel sözleşme davranışını Behaviors program aracılığıyla özelliğine System.ServiceModel.ServiceHost eklemektir. Bu şekilde uygulandığında, davranış herhangi bir uç noktada bu sözleşmeden geçen tüm iletiler için uygulanır.
Uyarı
Davranış, aynı türdeki tüm sözleşmelere uygulanır. Örneğin, aynı sözleşme türünü program aracılığıyla birden fazla uç noktaya eklerseniz, davranış aynı sözleşme nesnesine başvuran tüm uç noktaları değiştirir.
İkinci yöntem, bunu uygulayan IContractBehavior ve uygulayan özel bir öznitelik oluşturmaktır:
Sözleşme arabirimi. Bu durumda, davranış herhangi bir uç noktada bu türdeki tüm sözleşmelere uygulanır.
Hizmet sınıfı. Bu durumda davranış, sözleşmeden bağımsız olarak tüm uç noktalara uygulanır.
Geri çağırma sınıfı. Bu durumda, davranış çift yönlü istemcinin uç noktasına uygulanır.
Özel öznitelik de uygularsa System.ServiceModel.Description.IContractBehaviorAttribute, ikinci yaklaşımın davranışı biraz değişir. Bu durumda davranış aşağıdaki gibidir:
Sözleşme arabirimi. Bu durumda, davranış herhangi bir uç noktada bu türdeki tüm sözleşmelere uygulanır ve Windows Communication Foundation (WCF) özelliğin IContractBehaviorAttribute.TargetContract değerini yoksayar.
Hizmet sınıfı. Bu durumda, davranış yalnızca sözleşmesi IContractBehaviorAttribute.TargetContract özelliğinin değeri olan uç noktalara uygulanır.
Geri çağırma sınıfı. Bu durumda, davranış çift yönlü istemcinin uç noktasına uygulanır ve WCF özelliğin IContractBehaviorAttribute.TargetContract değerini yoksayar.
Özelleştirme görevini hedeflendiği istemcide gerçekleştirmek için, IContractBehavior nesnenin istemci çalışma zamanının oluşturulmasından önce özelliğine Behaviors eklenmesi gerekir ve bu durum çağrıldığında ChannelFactory<TChannel>.CreateChannel gerçekleşir. Bunu yapmanın iki yolu vardır:
özel sözleşme davranışını Behaviors , çağrıldığı noktadan önce program aracılığıyla özelliğine ChannelFactory<TChannel>.CreateChannel ekleyin.
ayrıca uygulayan IContractBehaviorözel bir öznitelik oluşturun.
İstemci veya hizmet uygulamasına program aracılığıyla türler ekleme IContractBehavior hakkında daha fazla bilgi için bkz. Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
Yöntemler
| Name | Description |
|---|---|
| AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
Tüm bağlama öğelerini sözleşme davranışını destekleyecek şekilde yapılandırılır. |
| ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
Bir sözleşmede istemcinin bir değişikliğini veya uzantısını uygular. |
| ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
Bir sözleşmede istemcinin bir değişikliğini veya uzantısını uygular. |
| Validate(ContractDescription, ServiceEndpoint) |
Sözleşmenin ve uç noktanın sözleşme davranışını destekleyeebileceğini onaylamak için uygulayın. |