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" 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 bir 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şmede uzantılar değiştirmek, incelemek veya eklemek için yöntemini kullanın.
Hizmet uygulamasındaki ApplyDispatchBehavior bir sözleşmede uzantılar 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 nesneleri 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.
Not
IContractBehavior Tüm yöntemler ve System.ServiceModel.Description.ServiceEndpoint değerlerini parametre olarak 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, nesnede Behaviors yöntemi çağrıldığında ICommunicationObject.Open oluşan hizmet çalışma zamanının oluşturulmasından önce özelliğine System.ServiceModel.ServiceHost eklenmesi gerekir. Bunu yapmanın iki yolu vardır.
İlk yöntem, yöntemin nesnesinde çağrıldığı ICommunicationObject.Open System.ServiceModel.ServiceHost noktadan önce özel sözleşme davranışını Behaviors özelliğe program aracılığıyla eklemektir. Bu şekilde uygulandığında, davranış herhangi bir uç noktada bu sözleşmeden akan tüm iletiler için uygulanır.
Not
Davranış, aynı türdeki tüm sözleşmelere uygulanır. Örneğin, aynı sözleşme türünü birden fazla uç noktaya program aracılığıyla eklerseniz, davranış aynı sözleşme nesnesine başvuran tüm uç noktaları değiştirir.
İkinci yöntem, bunu uygulayan ve aşağıdakilere IContractBehavior 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.
İkinci yaklaşımın davranışı, özel öznitelik de uygularsa System.ServiceModel.Description.IContractBehaviorAttributebiraz 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şmenin özelliğin değeri olan uç noktalara IContractBehaviorAttribute.TargetContract 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, çağrıldığında ChannelFactory<TChannel>.CreateChannel gerçekleşen istemci çalışma zamanının oluşturulmasından önce özelliğine eklenmesi Behaviors gerekir. Bunu yapmak için iki yol vardır:
özel sözleşme davranışını Behaviors , çağrıldığı noktadan önce özelliğine ChannelFactory<TChannel>.CreateChannel program aracılığıyla ekleyin.
ayrıca uygulayan IContractBehaviorözel bir öznitelik oluşturun.
İstemci veya hizmet uygulamasına program aracılığıyla tür ekleme IContractBehavior hakkında daha fazla bilgi için bkz. Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
Yöntemler
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) |
Sözleşmede istemcinin bir değişikliğini veya uzantısını uygular. |
ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
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. |