Condividi tramite


IEndpointBehavior Interfaccia

Definizione

Implementa metodi che possono essere usati per estendere il comportamento della fase di esecuzione per un endpoint in un'applicazione client o di servizio.

public interface class IEndpointBehavior
public interface IEndpointBehavior
type IEndpointBehavior = interface
Public Interface IEndpointBehavior
Derivato

Esempio

Nell'esempio di codice seguente viene illustrata l'implementazione di un comportamento dell'endpoint che aggiunge un oggetto System.ServiceModel.Dispatcher.IDispatchMessageInspector a un'applicazione del servizio. In questo caso, la classe EndpointBehaviorMessageInspector implementa System.ServiceModel.Dispatcher.IDispatchMessageInspector per controllare il messaggio in entrata e in uscita, l'interfaccia IEndpointBehavior per inserire la classe di controllo nel sistema di ispezione per tutti gli endpoint per i quali è valido il comportamento e System.ServiceModel.Configuration.BehaviorExtensionElement per abilitare il comportamento del controllo messaggi utilizzando un file di configurazione dell'applicazione.

Il primo passaggio consiste nell'implementare il controllo messaggi.

// IDispatchMessageInspector Members

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
  Console.WriteLine("AfterReceiveRequest called.");
  return null;
}

public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("BeforeSendReply called.");
}

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo ApplyDispatchBehavior per aggiungere il controllo messaggi alla proprietà DispatchRuntime.MessageInspectors.

// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
  return;
}

public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
  behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}

public void Validate(ServiceEndpoint serviceEndpoint)
{
  return;
}

Nell'esempio di codice seguente viene illustrata l'implementazione di System.ServiceModel.Configuration.BehaviorExtensionElement per abilitare l'utilizzo del comportamento del controllo messaggi da un file di configurazione.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

Nel file di configurazione seguente viene illustrato come utilizzare l'esempio precedente dalla configurazione.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ServiceMetadata" />
          </baseAddresses>
        </host>
        <endpoint
          address="/SampleService"
          binding="wsHttpBinding"
          behaviorConfiguration="withMessageInspector" 
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="withMessageInspector">
          <endpointMessageInspector />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <add 
          name="endpointMessageInspector"
          type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
        />
      </behaviorExtensions>
    </extensions>
  </system.serviceModel>
</configuration>

Commenti

Implementare l'interfaccia IEndpointBehavior per modificare, esaminare o estendere aspetti dell'esecuzione dell'endpoint a livello di applicazione per applicazioni client o di servizio.

  • Utilizzare il metodo AddBindingParameters per passare dati personalizzati della fase di esecuzione per abilitare le associazioni a supportare il comportamento personalizzato.

  • Utilizzare il metodo ApplyClientBehavior per modificare, esaminare o inserire estensioni in un endpoint di un'applicazione client.

  • Utilizzare il metodo ApplyDispatchBehavior per modificare, esaminare o inserire estensioni in un'esecuzione dell'endpoint in un'applicazione del servizio.

  • Utilizzare il metodo Validate per verificare che una classe ServiceEndpoint soddisfi requisiti specifici. Questo metodo può essere utilizzato per garantire che in un endpoint sia abilitata una certa impostazione di configurazione, che supporti una particolare funzionalità e altri requisiti.

IEndpointBehavior gli oggetti possono usare uno di questi metodi, ma spesso solo uno è importante; in questi casi, i metodi inutilizzati possono restituire, eseguendo alcuna azione.

Nota

Tutti i metodi IEndpointBehavior passano un oggetto ServiceEndpoint come parametro. Questo parametro è utilizzabile solo per attività di esame. Se l'oggetto ServiceEndpoint viene modificato, il comportamento di esecuzione sarà indefinito.

Gli oggetti IEndpointBehavior sono utilizzati in genere per accedere alle varie proprietà degli oggetti System.ServiceModel.Dispatcher.DispatchRuntime, System.ServiceModel.Dispatcher.DispatchOperation, System.ServiceModel.Dispatcher.EndpointDispatcher e System.ServiceModel.Dispatcher.ChannelDispatcher in un'applicazione del servizio e alle classi System.ServiceModel.Dispatcher.ClientRuntime e System.ServiceModel.Dispatcher.ClientOperation in un'applicazione client. È inoltre possibile accedere alle proprietà di client e servizi duplex utilizzando le proprietà ClientRuntime.CallbackDispatchRuntime e DispatchRuntime.CallbackClientRuntime, rispettivamente.

Per una descrizione delle varie proprietà e personalizzazioni disponibili, vedere Estensione di ServiceHost e livello modello di servizio.

Dopo aver deciso una personalizzazione (e l'interfaccia di personalizzazione implementata se necessario) e IEndpointBehavior l'oggetto è stato deciso è l'ambito appropriato della personalizzazione, la personalizzazione deve essere inserita nel runtime di Windows Communication Foundation (WCF) implementando IEndpointBehavior e aggiungendo il comportamento dell'endpoint al runtime.

Esistono due modi per aggiungere il comportamento alla fase di esecuzione:

  • Aggiungere il comportamento dell'endpoint a livello di programmazione alla proprietà Behaviors prima dell'apertura del host del servizio (in un'applicazione del servizio) o della channel factory (in un'applicazione client).

  • Configurare il comportamento utilizzando un file di configurazione dell'applicazione. Per informazioni dettagliate, vedere <comportamentoExtensions>.

Per eseguire un'attività di personalizzazione nel relativo servizio, è necessario aggiungere l'oggetto IEndpointBehavior alla proprietà ServiceEndpoint.Behaviors prima della costruzione della fase di esecuzione del servizio che si verifica quando il metodo ICommunicationObject.Open viene chiamato sull'oggetto System.ServiceModel.ServiceHost. Per eseguire un'attività di personalizzazione nel client, è necessario aggiungere l'oggetto IEndpointBehavior alla proprietà ServiceEndpoint.Behaviors prima di chiamare il metodo ChannelFactory<TChannel>.CreateChannel o il metodo ICommunicationObject.Open su ChannelFactory<TChannel>.

Metodi

AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Procedere all'implementazione per passare i dati in fase di esecuzione alle associazioni per garantire il supporto del comportamento personalizzato.

ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Implementa una modifica o un'estensione del client all'interno di un endpoint.

ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implementa una modifica o un'estensione del servizio all'interno di un endpoint.

Validate(ServiceEndpoint)

Procedere all'implementazione per verificare che l'endpoint soddisfi alcuni criteri specificati.

Si applica a