<?xml version="1.0" encoding="utf-8"?>
<Type Name="IChannel" FullName="System.ServiceModel.Channels.IChannel">
  <TypeSignature Language="C#" Value="public interface IChannel : System.ServiceModel.ICommunicationObject" />
  <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IChannel implements class System.ServiceModel.ICommunicationObject" />
  <AssemblyInfo>
    <AssemblyName>System.ServiceModel</AssemblyName>
    <AssemblyVersion>4.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <Interfaces>
    <Interface>
      <InterfaceName>System.ServiceModel.ICommunicationObject</InterfaceName>
    </Interface>
  </Interfaces>
  <Docs>
    <remarks>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>Channels must satisfy the contract of a state machine as defined by the <see cref="T:System.ServiceModel.ICommunicationObject" /> interface. </para>
      <para>The <see cref="T:System.ServiceModel.Channels.IChannel" /> interface adds the</para>
      <para>
        <see cref="M:System.ServiceModel.Channels.IChannel.GetProperty``1" /> method to the <see cref="T:System.ServiceModel.ICommunicationObject" /> interface. This method provides a mechanism for retrieving properties from the channel stack regardless of where in the stack those properties live. The term "property" in the method name refers to a piece of information that belongs to one of the channels in the stack. The CLR type for that property is determined by <paramref name="T" />. This method of retrieval is also used on channel factories and channel listeners.</para>
      <para>IChannel is inherited by each of the channel interfaces associated with the basic message-exchange patterns: </para>
      <list type="bullet">
        <item>
          <para>
            <see cref="T:System.ServiceModel.Channels.IInputChannel" /> for receiving messages.</para>
        </item>
        <item>
          <para>
            <see cref="T:System.ServiceModel.Channels.IOutputChannel" /> for sending messages.</para>
        </item>
        <item>
          <para>
            <see cref="T:System.ServiceModel.Channels.IRequestChannel" /> for sending a request.</para>
        </item>
        <item>
          <para>
            <see cref="T:System.ServiceModel.Channels.IReplyChannel" /> for sending a reply. </para>
        </item>
        <item>
          <para>
            <see cref="T:System.ServiceModel.Channels.IDuplexChannel" /> for bi-directional messaging. </para>
        </item>
      </list>
    </remarks>
    <summary>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>Defines the basic interface that all channel objects must implement. It requires that they implement the state machine interface shared by all communication objects and that they implement a method to retrieve objects from the channel stack. </para>
    </summary>
  </Docs>
  <Members>
    <Member MemberName="GetProperty&lt;T&gt;">
      <MemberSignature Language="C#" Value="public T GetProperty&lt;T&gt; () where T : class;" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance !!T GetProperty&lt;class T&gt;() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>4.0.0.0</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>T</ReturnType>
      </ReturnValue>
      <TypeParameters>
        <TypeParameter Name="T">
          <Constraints>
            <ParameterAttribute>ReferenceTypeConstraint</ParameterAttribute>
          </Constraints>
        </TypeParameter>
      </TypeParameters>
      <Parameters />
      <Docs>
        <remarks>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Use this to request a typed object such as an interface for setting properties or getting status from the appropriate layer in the channel stack. If a layer supports returning the requested object, it returns it. If not, it delegates the call down to the next layer in the stack. If it gets to the bottom of the stack and no channel layer supported the requested object, then the method returns null.</para>
        </remarks>
        <summary>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>Returns a typed object requested, if present, from the appropriate layer in the channel stack.</para>
        </summary>
        <returns>
          <attribution license="cc4" from="Microsoft" modified="false" />
          <para>The typed object <paramref name="T" /> requested if it is present or null if it is not.</para>
        </returns>
        <typeparam name="T">
          <attribution license="cc4" from="Microsoft" modified="false" />The typed object for which the method is querying.</typeparam>
      </Docs>
    </Member>
  </Members>
</Type>