<?xml version="1.0" encoding="utf-8"?>
<Type Name="IEndpointBehavior" FullName="System.ServiceModel.Description.IEndpointBehavior">
  <TypeSignature Language="C#" Value="public interface IEndpointBehavior" />
  <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IEndpointBehavior" />
  <AssemblyInfo>
    <AssemblyName>System.ServiceModel</AssemblyName>
    <AssemblyVersion>4.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <Interfaces />
  <Docs>
    <remarks>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>Implement the <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> interface to modify, examine, or extend some aspect of endpoint-wide execution at the application level for either client or service applications.</para>
      <list type="bullet">
        <item>
          <para>Use the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.AddBindingParameters(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Channels.BindingParameterCollection)" /> method to pass custom data at runtime to enable bindings to support custom behavior.</para>
        </item>
        <item>
          <para>Use the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyClientBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.ClientRuntime)" /> method to modify, examine, or insert extensions to an endpoint in a client application.</para>
        </item>
        <item>
          <para>Use the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.EndpointDispatcher)" /> method to modify, examine, or insert extensions to endpoint-wide execution in a service application.</para>
        </item>
        <item>
          <para>Use the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.Validate(System.ServiceModel.Description.ServiceEndpoint)" /> method to confirm that a <see cref="T:System.ServiceModel.Description.ServiceEndpoint" /> meets specific requirements. This can be used to ensure that an endpoint has a certain configuration setting enabled, supports a particular feature and other requirements.</para>
        </item>
      </list>
      <para>
        <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> objects can make use of any of these methods, but often only one is important; in such cases, the unused methods can return, performing no action.</para>
      <block subset="none" type="note">
        <para>All of the <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> methods pass a <see cref="T:System.ServiceModel.Description.ServiceEndpoint" /> object as a parameter. This parameter is for examination only; if you modify the <see cref="T:System.ServiceModel.Description.ServiceEndpoint" /> object the execution behavior is undefined.</para>
      </block>
      <para>
        <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> objects are typically used to access the various properties of the <see cref="T:System.ServiceModel.Dispatcher.DispatchRuntime" />, <see cref="T:System.ServiceModel.Dispatcher.DispatchOperation" />, <see cref="T:System.ServiceModel.Dispatcher.EndpointDispatcher" />, and <see cref="T:System.ServiceModel.Dispatcher.ChannelDispatcher" /> objects in a service application and the <see cref="T:System.ServiceModel.Dispatcher.ClientRuntime" /> and <see cref="T:System.ServiceModel.Dispatcher.ClientOperation" /> in a client application. In addition, you can access the properties of duplex clients and services using the <see cref="P:System.ServiceModel.Dispatcher.ClientRuntime.CallbackDispatchRuntime" /> and <see cref="P:System.ServiceModel.Dispatcher.DispatchRuntime.CallbackClientRuntime" /> properties, respectively.</para>
      <para>For a description of the various properties and customizations available, see <format type="text/html"><a href="954c138a-1cd0-45a0-8abe-e4d2b8ff5400">Extending ServiceHost and the Dispatcher</a></format>.</para>
      <para>Once a customization has been decided upon (and the customization interface implemented if necessary) and the <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> has been decided is the appropriate scope of customization, the customization must be inserted into the indigo1 runtime by implementing <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> and adding the endpoint behavior to the runtime.</para>
      <para>There are two ways to add the behavior to the runtime:</para>
      <list type="bullet">
        <item>
          <para>Programmatically add the custom endpoint behavior to the <see cref="P:System.ServiceModel.Description.ServiceEndpoint.Behaviors" /> property prior to the opening of the service host (in a service application) or the channel factory (in a client application).</para>
        </item>
        <item>
          <para>Configure the behavior using an application configuration file. For details, see <format type="text/html"><a href="59f2791a-c78f-40d7-aa80-0d9cd10135d9">&lt;behaviorExtensions&gt;</a></format>.</para>
        </item>
      </list>
      <para>To perform the service customization task for which it is intended, the <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> object must be added to the <see cref="P:System.ServiceModel.Description.ServiceEndpoint.Behaviors" /> property prior to the construction of the service runtime, which occurs when <see cref="Overload:System.ServiceModel.ICommunicationObject.Open" /> method is called on <see cref="T:System.ServiceModel.ServiceHost" />. To perform a client customization task, the <see cref="T:System.ServiceModel.Description.IEndpointBehavior" /> object must be added to the <see cref="P:System.ServiceModel.Description.ServiceEndpoint.Behaviors" /> property before calling the <see cref="Overload:System.ServiceModel.ChannelFactory`1.CreateChannel" /> method or the <see cref="Overload:System.ServiceModel.ICommunicationObject.Open" /> method on <see cref="T:System.ServiceModel.ChannelFactory`1" />.</para>
    </remarks>
    <summary>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>Implements methods that can be used to extend run-time behavior for an endpoint in either a service or client application.</para>
    </summary>
  </Docs>
  <Members>
    <Member MemberName="AddBindingParameters">
      <MemberSignature Language="C#" Value="public void AddBindingParameters (System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void AddBindingParameters(class System.ServiceModel.Description.ServiceEndpoint endpoint, class System.ServiceModel.Channels.BindingParameterCollection parameters) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="endpoint" Type="System.ServiceModel.Description.ServiceEndpoint" />
        <Parameter Name="parameters" Type="System.ServiceModel.Channels.BindingParameterCollection" />
      </Parameters>
      <Docs>
        <param name="parameters">To be added.</param>
        <remarks>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.AddBindingParameters(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Channels.BindingParameterCollection)" /> method to provide binding elements with the extra objects they require to support the endpoint behavior. When binding parameters are added here the binding can locate these objects when the channel listener or channel factory is created. Typically, you implement the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.AddBindingParameters(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Channels.BindingParameterCollection)" /> method to pass information about the endpoint to a custom binding element so that it can build a supporting channel correctly. Return no value if no modifications are required.</para>
        </remarks>
        <summary>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement to pass data at runtime to bindings to support custom behavior.</para>
        </summary>
        <param name="endpoint">
          <attribution license="cc4" from="Microsoft" modified="false" />The endpoint to modify.</param>
      </Docs>
    </Member>
    <Member MemberName="ApplyClientBehavior">
      <MemberSignature Language="C#" Value="public void ApplyClientBehavior (System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.ClientRuntime behavior);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void ApplyClientBehavior(class System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, class System.ServiceModel.Dispatcher.ClientRuntime behavior) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="serviceEndpoint" Type="System.ServiceModel.Description.ServiceEndpoint" />
        <Parameter Name="behavior" Type="System.ServiceModel.Dispatcher.ClientRuntime" />
      </Parameters>
      <Docs>
        <param name="serviceEndpoint">To be added.</param>
        <param name="behavior">To be added.</param>
        <remarks>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyClientBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.ClientRuntime)" /> method to view, modify, or add custom extension to the client runtime across all messages used with an endpoint or for specific operations. For details about what customizations you can do with a client run-time object, see <see cref="T:System.ServiceModel.Dispatcher.ClientRuntime" /> and <see cref="T:System.ServiceModel.Dispatcher.ClientOperation" />. </para>
          <para>It is recommended that the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyClientBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.ClientRuntime)" /> method throw a <see cref="T:System.NotImplementedException" /> if the behavior is only intended for use in a service application.</para>
          <para>Because other behaviors may have already added or removed some operations from the runtime there is no guarantee that there are the same number of operations in the description as there are <see cref="T:System.ServiceModel.Dispatcher.DispatchOperation" /> objects in the <see cref="P:System.ServiceModel.Dispatcher.DispatchRuntime.Operations" /> property.</para>
        </remarks>
        <summary>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implements a modification or extension of the client across an endpoint.</para>
        </summary>
      </Docs>
    </Member>
    <Member MemberName="ApplyDispatchBehavior">
      <MemberSignature Language="C#" Value="public void ApplyDispatchBehavior (System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Dispatcher.EndpointDispatcher dispatcher);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void ApplyDispatchBehavior(class System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, class System.ServiceModel.Dispatcher.EndpointDispatcher dispatcher) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="serviceEndpoint" Type="System.ServiceModel.Description.ServiceEndpoint" />
        <Parameter Name="dispatcher" Type="System.ServiceModel.Dispatcher.EndpointDispatcher" />
      </Parameters>
      <Docs>
        <param name="serviceEndpoint">To be added.</param>
        <param name="dispatcher">To be added.</param>
        <remarks>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.EndpointDispatcher)" /> method to view, modify, or extend the service runtime across all messages or for specific operations in an endpoint. For details about what customizations you can do in a service application, see <see cref="T:System.ServiceModel.Dispatcher.DispatchRuntime" /> and <see cref="T:System.ServiceModel.Dispatcher.DispatchOperation" />.</para>
          <para>It is recommended that the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.EndpointDispatcher)" /> method throw a <see cref="T:System.NotImplementedException" /> exception if the behavior is only intended for use in a client application. </para>
          <para>Note that there can be two operations with the same name in the description when using a callback contract (one operation in each direction). If you are iterating through operations, you must correlate the message direction between the endpoint <see cref="T:System.ServiceModel.Dispatcher.DispatchRuntime" /> and what is returned by the <see cref="P:System.ServiceModel.Dispatcher.DispatchRuntime.CallbackClientRuntime" /> property.</para>
          <para>In addition, because other behaviors may have already added or removed some operations from the runtime, there is no guarantee that there are the same number of operations in description as there are <see cref="T:System.ServiceModel.Dispatcher.DispatchOperation" /> objects in the <see cref="P:System.ServiceModel.Dispatcher.DispatchRuntime.Operations" /> property.</para>
        </remarks>
        <summary>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implements a modification or extension of the service across an endpoint.</para>
        </summary>
      </Docs>
    </Member>
    <Member MemberName="Validate">
      <MemberSignature Language="C#" Value="public void Validate (System.ServiceModel.Description.ServiceEndpoint serviceEndpoint);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Validate(class System.ServiceModel.Description.ServiceEndpoint serviceEndpoint) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="serviceEndpoint" Type="System.ServiceModel.Description.ServiceEndpoint" />
      </Parameters>
      <Docs>
        <param name="serviceEndpoint">To be added.</param>
        <remarks>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.Validate(System.ServiceModel.Description.ServiceEndpoint)" /> method to examine the structure to confirm any set of criteria. It is not necessary to perform any customizations in <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyClientBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.ClientRuntime)" /> or <see cref="M:System.ServiceModel.Description.IEndpointBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint,System.ServiceModel.Dispatcher.EndpointDispatcher)" /> to make use of this method. If the endpoint passes validation, return; otherwise, throw an exception.</para>
          <para>For example, the <see cref="M:System.ServiceModel.Description.IEndpointBehavior.Validate(System.ServiceModel.Description.ServiceEndpoint)" /> method can be use to ensure that all endpoints use an approved corporate binding.</para>
        </remarks>
        <summary>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Implement to confirm that the endpoint meets some intended criteria.</para>
        </summary>
      </Docs>
    </Member>
  </Members>
</Type>