De sécurité non valide jeton de contexte lors de l'utilisation de WCF avec un équilibrage de Charge (AWS)

J'ai une application WCF est hébergé sur AWS. Pour parvenir à une plus grande disponibilité, j'ai créé un instantané de la WCF de la machine et de lancer un autre exemple avec cette image.

Aussi, j'ai créé un Élastique à l'Équilibre de la Charge (ELB) qui achemine les demandes pour ces 2 serveurs.

Avec mon WCF Client, je peux réussir à se connecter avec les deux serveurs si j'utilise la machine d'adresse IP publique. Mais si j'utilise l'ELB nom d'hôte, ma connexion échoue avec l'erreur suivante:

Système.ServiceModel.FaultException: Le message n'a pas pu être
transformés. C'est probablement parce que l'action
'http://tempuri.org/IService/GetCustomerData"est incorrect ou que
le message contient pas valide ou a expiré contexte de sécurité ou jeton
car il existe une incompatibilité entre les liaisons. Le contexte de sécurité
jeton serait pas valide si le service interrompu le canal en raison de
l'inactivité. Pour empêcher le service de l'abandon des sessions inactives
prématurément augmenter le délai de réception (sur le point de terminaison du service de l'
de liaison.

L'erreur suggère que j'ai un pas valide ou a expiré jeton de sécurité. Donc, j'ai vérifié l'Envoyer et de Recevoir de délai d'attente et c'est déjà réglé sur 10 minutes: sendTimeout="00:10:00", receiveTimeout="00:10:00"
(les demandes prend habituellement de 5 à 15 secondes)

Mon biding configuration:

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" useDefaultWebProxy="true">
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic"/>
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

Aussi, j'ai vérifié:

  • ELB et des machines de Pare-feu sont ouverts sur les ports 80 et 443.
  • Mon ELB a été configuré avec le certificat correct et a une écoute sur le port 443.
  • J'ai un Serveur Web IIS sur les deux machines. Si j'utilise la ELB adresse, tout fonctionne.
  • Si la ELB routes à une seule machine, WCF œuvres. Si les routes à deux machines, WCF échoue.

OriginalL'auteur Zanon | 2014-08-23