Procedimiento para crear un enlace federado dúplex

WSFederationHttpBinding solo admite los contratos de intercambio de mensajes de datagrama y solicitud/respuesta. Para utilizar el contrato de intercambio de mensajes dúplex, debe crear un enlace personalizado. Los procedimientos siguientes muestran cómo conseguirlo mediante configuración, utilizando la seguridad de modo de mensaje para los transportes TCP y HTTP, y la seguridad de modo mixto para el transporte TCP. El ejemplo de código donde se muestran los tres enlaces se encuentra al final de este tema.

También puede crear el enlace en el código. Para ver una descripción de la pila de elementos de enlace que se va a crear, consulte Creación de un enlace personalizado mediante SecurityBindingElement.

Para crear un enlace personalizado federado dúplex con HTTP

  1. En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.

  2. Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo name establecido en FederationDuplexHttpMessageSecurityBinding.

  3. Dentro del elemento <binding>, cree un elemento <security> con el atributo authenticationMode establecido en SecureConversation.

  4. Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo authenticationMode establecido en IssuedTokenForCertificate o IssuedTokenForSslNegotiated.

  5. Después del elemento <security>, cree un elemento <compositeDuplex> vacío.

  6. Después del elemento <compositeDuplex>, cree un elemento <oneWay> vacío.

  7. Después del elemento <oneWay>, cree un elemento <httpTransport> vacío.

Para crear un enlace personalizado federado dúplex con el modo de seguridad de mensajes TCP

  1. En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.

  2. Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo name establecido en FederationDuplexTcpMessageSecurityBinding.

  3. Dentro del elemento <binding>, cree un elemento <security> con el atributo authenticationMode establecido en SecureConversation.

  4. Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo authenticationMode establecido en IssuedTokenForCertificate o IssuedTokenForSslNegotiated.

  5. Después del elemento <security>, cree un elemento <tcpTransport> vacío.

Para crear un enlace personalizado federado dúplex con el modo de seguridad mixto TCP

  1. En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.

  2. Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo name establecido en FederationDuplexTcpTransportSecurityWithMessageCredentialBinding.

  3. Dentro del elemento <binding>, cree un elemento <security> con el atributo authenticationMode establecido en SecureConversation.

  4. Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo authenticationMode establecido en IssuedTokenForCertificate o IssuedTokenForSslNegotiated.

  5. Después del elemento <security>, cree un elemento <sslStreamSecurity> vacío.

  6. Después del elemento <sslStreamSecurity>, cree un elemento <tcpTransport> vacío.

Ejemplo de código

Ejemplo con tres enlaces

  1. Inserte el código siguiente en su archivo de configuración.

Ejemplo

<bindings>
   <customBinding>
      <binding name="FederationDuplexHttpMessageSecurityBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
          <security authenticationMode="SecureConversation">
              <secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated" />
          </security>
          <compositeDuplex />
          <oneWay />
          <httpTransport />
       </binding>
<!-- duplex over https is not supported -->
       <binding name="FederationDuplexTcpMessageSecurityBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
          <security authenticationMode="SecureConversation">
              <secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated" />
          </security>
          <tcpTransport />
       </binding>
       <binding name="FederationDuplexTcpTransportSecurityWithMessageCredentialsBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
          <security authenticationMode="SecureConversation">
              <secureConversationBootstrap authenticationMode="IssuedTokenOverTransport" />
          </security>
<!-- requireClientCertificate = true or <windowsStreamSecurity /> can be used, but does not make sense for most scenarios -->
          <sslStreamSecurity />
          <tcpTransport />
       </binding>
    </customBinding>
</bindings>