Поделиться через


IInstanceProvider Интерфейс

Определение

Объявляет методы, предоставляющие объект службы или перезапуская объект службы для службы Windows Communication Foundation (WCF).

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

Примеры

В следующем примере кода показано, как реализовать IInstanceProvider поведение с одним и тем же экземпляром службы и не перезапускать его.

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

В следующем примере кода показано, как реализовать настраиваемый атрибут, реализующий IContractBehavior вставку поставщика пользовательского экземпляра службы. Он также реализует, который привязывает 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

Комментарии

IInstanceProvider Реализуйте интерфейс для управления созданием и перезапуском объектов службы при запросе InstanceContext или удалении объекта.

IInstanceProvider После реализации интерфейса необходимо назначить объект поставщика пользовательского экземпляра свойству, используя поведение конечной точки (IEndpointBehaviorобъектInstanceProvider) или поведение контракта (IContractBehaviorобъект).

Если механизм вставки является поведением конечной точки, можно также реализовать BehaviorExtensionElement объект, который может вставить пользовательское поведение с помощью файла конфигурации. Если механизм вставки является поведением контракта, можно вставить поведение программным способом до открытия узла службы или реализовать пользовательский атрибут. (Пример подхода к поведению контракта см. в разделе "Пример".)

IInstanceProvider имеет два метода и GetInstanceReleaseInstance. Обычно эти методы реализуются для создания объектов службы с помощью конструктора без параметров или инициализации или удаления определенного состояния, связанного со временем существования объекта. Пул объектов службы является одним из примеров пользовательских IInstanceProvider функций.

Как правило, вызывается InstanceContextGetInstance при InstanceContext первом создании и вызове ReleaseInstance метода при InstanceContext закрытии.

Перед закрытием объекта можно освободить InstanceContext объект InstanceContext службы двумя способами. Первый метод — задать или AfterCallBeforeAndAfterCall.ReleaseInstanceMode Второй метод — вызвать ReleaseServiceInstance метод. Если это сделано, InstanceContext метод вызывается ReleaseInstance в поставщике экземпляра диспетчера. Если новое сообщение поступает после выпуска экземпляра, WCF создает новый экземпляр с помощью GetInstance метода.

Замечание

InstanceContextMode Если служба являетсяSingle, система не вызывает GetInstance методы или ReleaseInstance даже если пользователь не предоставил хорошо известный объект службы, если пользователь не вызывает напрямуюReleaseServiceInstance, а затем вызываетGetServiceInstance.

Методы

Имя Описание
GetInstance(InstanceContext, Message)

Возвращает объект службы, заданный указанным InstanceContext объектом.

GetInstance(InstanceContext)

Возвращает объект службы, заданный указанным InstanceContext объектом.

ReleaseInstance(InstanceContext, Object)

Вызывается при InstanceContext перезапуске объекта службы.

Применяется к