IEndpointBehavior.ApplyDispatchBehavior Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Implementa una modifica o un'estensione del servizio in un endpoint.
public:
void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)
Parametri
- endpoint
- ServiceEndpoint
Endpoint che espone il contratto.
- endpointDispatcher
- EndpointDispatcher
Dispatcher endpoint da modificare o estendere.
Esempio
Nell'esempio di codice seguente viene illustrata l'implementazione di un comportamento dell'endpoint che aggiunge un System.ServiceModel.Dispatcher.IDispatchMessageInspector oggetto in un'applicazione di servizio. In questo caso, la EndpointBehaviorMessageInspector classe implementa System.ServiceModel.Dispatcher.IDispatchMessageInspector per esaminare il messaggio in ingresso e in uscita, l'interfaccia IEndpointBehavior per inserire la classe inspector nel sistema di ispezione per tutti gli endpoint a cui si applica il comportamento e System.ServiceModel.Configuration.BehaviorExtensionElement per abilitare il comportamento del controllo messaggi usando 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 l'uso del ApplyDispatchBehavior metodo per aggiungere il controllo messaggi alla DispatchRuntime.MessageInspectors proprietà .
// 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 consentire l'uso 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();
}
Infine, il file di configurazione seguente illustra come usare 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 il ApplyDispatchBehavior metodo per visualizzare, modificare o estendere il runtime del servizio in tutti i messaggi o per operazioni specifiche in un endpoint. Per informazioni dettagliate sulle personalizzazioni che è possibile eseguire in un'applicazione di servizio, vedere System.ServiceModel.Dispatcher.DispatchRuntime e System.ServiceModel.Dispatcher.DispatchOperation.
È consigliabile che il ApplyDispatchBehavior metodo generi un'eccezione NotImplementedException se il comportamento è destinato solo all'uso in un'applicazione client.
Si noti che nella descrizione possono essere presenti due operazioni con lo stesso nome quando si usa un contratto di callback (un'operazione in ogni direzione). Se si esegue l'iterazione delle operazioni, è necessario correlare la direzione del messaggio tra l'endpoint System.ServiceModel.Dispatcher.DispatchRuntime e ciò che viene restituito dalla DispatchRuntime.CallbackClientRuntime proprietà .
Inoltre, poiché altri comportamenti potrebbero aver già aggiunto o rimosso alcune operazioni dal runtime, non esiste alcuna garanzia che vi siano lo stesso numero di operazioni nella descrizione in quanto sono System.ServiceModel.Dispatcher.DispatchOperation presenti oggetti nella DispatchRuntime.Operations proprietà .