IInstanceProvider 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.
Windows Communication Foundation (WCF) hizmeti için hizmet nesnesi sağlayan veya hizmet nesnesini geri dönüştüren yöntemleri bildirir.
public interface class IInstanceProvider
public interface IInstanceProvider
type IInstanceProvider = interface
Public Interface IInstanceProvider
Örnekler
Aşağıdaki kod örneği, "tekil" davranış sağlayan uygulamanın nasıl yapıldığını IInstanceProvider gösterir; her zaman aynı hizmet örneğini döndürür ve geri dönüştürmez.
public class ObjectProviderBehavior : IInstanceProvider
{
string message;
SampleService service = null;
public ObjectProviderBehavior(string msg)
{
Console.WriteLine("The non-default constructor has been called.");
this.message = msg;
this.service = new SampleService("Singleton sample service.");
}
#region IInstanceProvider Members
public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
{
Console.WriteLine("GetInstance is called:");
return this.service;
}
public object GetInstance(InstanceContext instanceContext)
{
Console.WriteLine("GetInstance is called:");
return this.service;
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.");
}
#endregion
}
Public Class ObjectProviderBehavior
Implements IInstanceProvider
Private message As String
Private service As SampleService = Nothing
Public Sub New(ByVal msg As String)
Console.WriteLine("The non-default constructor has been called.")
Me.message = msg
Me.service = New SampleService("Singleton sample service.")
End Sub
#Region "IInstanceProvider Members"
Public Function GetInstance(ByVal instanceContext As InstanceContext, ByVal message As System.ServiceModel.Channels.Message) As Object Implements IInstanceProvider.GetInstance
Console.WriteLine("GetInstance is called:")
Return Me.service
End Function
Public Function GetInstance(ByVal instanceContext As InstanceContext) As Object Implements IInstanceProvider.GetInstance
Console.WriteLine("GetInstance is called:")
Return Me.service
End Function
Public Sub ReleaseInstance(ByVal instanceContext As InstanceContext, ByVal instance As Object) Implements IInstanceProvider.ReleaseInstance
Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.")
End Sub
#End Region
End Class
Aşağıdaki kod örneği, özel hizmet örneği sağlayıcısını eklemek için uygulayan özel bir özniteliğin nasıl uygulandığını IContractBehavior gösterir. Ayrıca, kullanımını belirli bir sözleşmeye bağlayan uygular IContractBehaviorAttribute.
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
IInstanceProvider Bir nesne tarafından InstanceContext istendiğinde veya atıldığında hizmet nesnelerinin oluşturulmasını ve geri dönüşümünü denetlemek için arabirimini uygulayın.
IInstanceProvider Arabirim uygulandıktan sonra, özel örnek sağlayıcı nesnenizi InstanceProvider bir uç nokta davranışı (nesne) veya sözleşme davranışı (IEndpointBehaviorIContractBehavior nesne) kullanarak özelliğine atamanız gerekir.
Ekleme mekanizması bir uç nokta davranışıysa, yapılandırma dosyası kullanarak özel davranışınızı ekleyebilen bir nesne de uygulayabilirsiniz BehaviorExtensionElement . Ekleme mekanizması bir sözleşme davranışıysa, hizmet konağı açılmadan önce program aracılığıyla davranışı ekleyebilir veya özel bir öznitelik uygulayabilirsiniz. (Sözleşme davranışı yaklaşımının bir örneği için Örnek bölümüne bakın.)
IInstanceProvider GetInstance ve ReleaseInstanceadlı iki yöntemi vardır. Bu yöntemler genellikle parametresiz bir oluşturucu kullanarak hizmet nesneleri oluşturmak veya nesnenin ömrüyle ilgili bazı durumların başlatılması veya atılması için uygulanır. Hizmet nesnesi havuzu, özel IInstanceProvider işlevlerin bir örneğidir.
Genellikle, InstanceContext ilk oluşturulduğunda öğesini çağırır GetInstanceInstanceContext ve kapatıldığında InstanceContext yöntemini çağırırReleaseInstance.
Kapatılana kadar bir InstanceContext nesnenin hizmet nesnesini serbest bırakmasına InstanceContext neden olmanın iki yolu vardır. İlk yöntem veya BeforeAndAfterCallolarak ayarlamaktır.ReleaseInstanceModeAfterCall İkinci yöntem, yöntemini çağırmaktır ReleaseServiceInstance . Bu yapılırsa, InstanceContext dağıtıcının örnek sağlayıcısında yöntemini çağırır ReleaseInstance . Örnek yayımlandıktan sonra yeni bir ileti gelirse, WCF yöntemini kullanarak GetInstance yeni bir örnek oluşturur.
Uyarı
InstanceContextMode Hizmetin değeri iseSingle, kullanıcı tarafından doğrudan ReleaseServiceInstance çağrılmadığı ve sonra çağrılmadığı GetInstance sürece kullanıcı iyi bilinen bir hizmet nesnesi sağlamadığında bile sistem veya ReleaseInstance yöntemlerini çağırmazGetServiceInstance.
Yöntemler
| Name | Description |
|---|---|
| GetInstance(InstanceContext, Message) |
Belirtilen InstanceContext nesneye göre bir hizmet nesnesi döndürür. |
| GetInstance(InstanceContext) |
Belirtilen InstanceContext nesneye göre bir hizmet nesnesi döndürür. |
| ReleaseInstance(InstanceContext, Object) |
Bir nesne bir InstanceContext hizmet nesnesini geri dönüştürdiğinde çağrılır. |