IInstanceProvider Rozhraní
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Deklaruje metody, které poskytují objekt služby nebo recyklují objekt služby pro službu WCF (Windows Communication Foundation).
public interface class IInstanceProvider
public interface IInstanceProvider
type IInstanceProvider = interface
Public Interface IInstanceProvider
Příklady
Následující příklad kódu ukazuje, jak implementovat IInstanceProvider , které poskytuje chování "singleton". Vždy vrátí stejnou instanci služby a nerekláduje ji.
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
Následující příklad kódu ukazuje, jak implementovat vlastní atribut, který implementuje IContractBehavior vložení vlastního zprostředkovatele instance služby. Implementuje IContractBehaviorAttributetaké , který váže jeho použití na konkrétní kontrakt.
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
Poznámky
IInstanceProvider Implementujte rozhraní pro řízení vytváření a recyklace objektů služby, pokud je požadován nebo uvolněn objekt.InstanceContext
Po implementaci IInstanceProvider rozhraní je nutné přiřadit objekt zprostředkovatele vlastní instance k InstanceProvider vlastnosti pomocí chování koncového bodu (IEndpointBehaviorobjekt) nebo chování kontraktu (objekt).IContractBehavior
Pokud je mechanismus vložení chování koncového bodu, můžete také implementovat BehaviorExtensionElement objekt, který může vložit vlastní chování pomocí konfiguračního souboru. Pokud je mechanismus vložení chování kontraktu, můžete toto chování vložit programově před otevřením hostitele služby nebo můžete implementovat vlastní atribut. (Příklad přístupu chování kontraktu najdete v části Příklad.)
IInstanceProvider má dvě metody, GetInstance a ReleaseInstance. Tyto metody jsou obvykle implementovány pro vytváření objektů služby pomocí neparametrového konstruktoru nebo inicializace nebo odstranění některého stavu souvisejícího s životností objektu. Sdružování objektů služby je jedním z příkladů vlastních IInstanceProvider funkcí.
InstanceContext Obvykle vyvolá GetInstance při InstanceContext prvním vytvoření a vyvolá metodu ReleaseInstance při zavřeníInstanceContext.
Existují dva způsoby, jak způsobit InstanceContext uvolnění objektu služby před uzavřením objektu InstanceContext služby. První metodou je nastavit ReleaseInstanceMode hodnotu AfterCall nebo BeforeAndAfterCall. Druhou metodou ReleaseServiceInstance je volání metody. Pokud to uděláte, InstanceContext zavolá metodu ReleaseInstance na zprostředkovatele instance dispečera. Pokud po vydání instance přijde nová zpráva, WCF vytvoří novou instanci pomocí GetInstance metody.
Poznámka:
Pokud je Singleslužba , systém nevolá GetInstance ani ReleaseInstance metody, i když uživatel neposkytl dobře známý objekt služby, pokud uživatel přímo volá ReleaseServiceInstance a pak volá GetServiceInstance.InstanceContextMode
Metody
| Name | Description |
|---|---|
| GetInstance(InstanceContext, Message) |
Vrátí objekt služby vzhledem k zadanému InstanceContext objektu. |
| GetInstance(InstanceContext) |
Vrátí objekt služby vzhledem k zadanému InstanceContext objektu. |
| ReleaseInstance(InstanceContext, Object) |
Volá se InstanceContext , když objekt recykluje objekt služby. |