IInstanceProvider Gränssnitt

Definition

Deklarerar metoder som tillhandahåller ett tjänstobjekt eller återvinner ett tjänstobjekt för en Windows Communication Foundation-tjänst (WCF).

public interface class IInstanceProvider
public interface IInstanceProvider
type IInstanceProvider = interface
Public Interface IInstanceProvider

Exempel

I följande kodexempel visas hur du implementerar IInstanceProvider ett "singleton"-beteende. Det returnerar alltid samma tjänstinstans och återvinner den inte.

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

I följande kodexempel visas hur du implementerar ett anpassat attribut som implementeras IContractBehavior för att infoga instansprovidern för anpassade tjänster. Den implementerar IContractBehaviorAttributeockså , som binder dess användning till ett visst 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

Kommentarer

IInstanceProvider Implementera gränssnittet för att styra skapande och återvinning av tjänstobjekt när ett objekt begärs eller tas bortInstanceContext.

IInstanceProvider När gränssnittet har implementerats måste du tilldela det anpassade instansproviderobjektet InstanceProvider till egenskapen med antingen ett slutpunktsbeteende (ett IEndpointBehavior objekt) eller ett kontraktsbeteende (ett IContractBehavior objekt).

Om infogningsmekanismen är ett slutpunktsbeteende kan du även implementera ett BehaviorExtensionElement objekt som kan infoga ditt anpassade beteende med hjälp av en konfigurationsfil. Om infogningsmekanismen är ett kontraktsbeteende kan du infoga beteendet programmatiskt innan tjänstvärden öppnas eller implementera ett anpassat attribut. (Ett exempel på metoden för kontraktsbeteende finns i avsnittet Exempel.)

IInstanceProvider har två metoder, GetInstance och ReleaseInstance. Dessa metoder implementeras vanligtvis för att skapa tjänstobjekt med en icke-parameterlös konstruktor eller för att initiera eller ta bort något tillstånd som är relaterat till objektets livslängd. Poolering av tjänstobjekt är ett exempel på anpassade IInstanceProvider funktioner.

Vanligtvis InstanceContext anropar GetInstance när den InstanceContext först skapas och anropar ReleaseInstance metoden när den InstanceContext stängs.

Det finns två sätt att få ett InstanceContext objekt att släppa ett tjänstobjekt innan det InstanceContext stängs. Den första metoden är att ange ReleaseInstanceMode till AfterCall eller BeforeAndAfterCall. Den andra metoden är att anropa ReleaseServiceInstance metoden. Om detta är gjort InstanceContext anropar ReleaseInstance metoden på avsändarens instansprovider. Om ett nytt meddelande kommer efter att instansen har släppts skapar WCF en ny instans med metoden GetInstance .

Note

InstanceContextMode Om tjänsten är Singleanropar GetInstance systemet inte metoderna eller ReleaseInstance även när användaren inte har angett ett välkänt tjänstobjekt om inte användaren anropar ReleaseServiceInstance direkt och sedan anropar GetServiceInstance.

Metoder

Name Description
GetInstance(InstanceContext, Message)

Returnerar ett tjänstobjekt givet det angivna InstanceContext objektet.

GetInstance(InstanceContext)

Returnerar ett tjänstobjekt givet det angivna InstanceContext objektet.

ReleaseInstance(InstanceContext, Object)

Anropas när ett InstanceContext objekt återvinner ett tjänstobjekt.

Gäller för