"Jeton de contexte de sécurité invalide ou expiré" lors de l'exécution après un redémarrage de débogage
J'ai une Application WCF que je suis de codage. Je le démarrer et l'arrêter plusieurs fois que j'ai du changer les choses et ensuite exécuter l'appel de service à nouveau.
Car j'ai besoin d'informations de la session, je suis en utilisant wsHttpBinding
.
Avant de m'installer à wsHttpBinding
j'ai été en utilisant basicHttpBinding
et j'ai pu arrêter le service, apporter des modifications et de la relancer. Ensuite, j'ai pu lancer mon WCF client test WCF (la Tempête) contre l'extrémité et il serait encore fonctionner correctement.
Maintenant, il me dit:
Le message n'a pas pu être traitée. Ceci est probablement en raison de l'action " http://tempuri.org/IMyService/MyOperation " est incorrect ou que le message contient pas valide ou a expiré contexte de sécurité jeton ou parce qu'il y a un décalage 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 de service de liaison.
Cela signifie que je dois actualiser ma connexion et ré-installation de mon appel de service (qui devient ennuyeux après plusieurs centaines de fois.).
J'ai lu que la sécurité, le délai est de 10 minutes. Je suis re-courir en moins de 2 minutes, donc je ne pense pas que c'est un temps hors de question.
Ma conjecture est que l'expiration de ce jeton pour la raison évidente que j'ai tué et redémarré le service.
Le truc, c'est que je n'ai pas besoin des trucs de sécurité à tous les (j'ai seulement besoin de la séance des trucs ou je serais en utilisant BasicHttpBinding
Est-il de toute façon à faire mon Service WCF soucient pas de Contexte de Sécurité de Jetons?
Remarque: Mon client de test par défaut wsHttpBinding et a le niveau de sécurité. Mais je suppose que c'est la définition de cette parce que mon service est l'édition qu'il a besoin de sécurité.
Choses que j'ai essayé:
- J'ai essayé une configuration similaire à ce que j'ai trouvé Ici
<bindings> <wsHttpBinding> <binding name="WsEventLogBinding"> <security mode="Message"> <message establishSecurityContext="false" /> </security> </binding> </wsHttpBinding> </bindings>
Mais je ne sais pas vraiment ce que cela signifie ou si c'est ce dont j'ai besoin (qui n'est pas la sécurité à tous (pour l'instant)).
Cela ne retirez pas la question.
- Réglage
<security mode="None">
Cela n'aide pas.
source d'informationauteur Vaccano
Vous devez vous connecter pour publier un commentaire.
Au premier, vous êtes vrai : basicHttpBinding ne prend pas en charge ce en raison de la sans connexion /d'apatride, de la nature du protocole HTTP.
Mais je pense qu'il ya quelque chose de mal dans votre WCF compréhension.
Session est un concept générique en WCF. Il peut être de sécurité de session surdans lequel les deux extrémités de la communication, ont convenu d'un spécifique conversation sécurisée ou un fiable session dans lequel les messages peuvent être configurés pour être remis dans l'ordre et exactement une fois, s'assurer que les messages sont reçus, même lorsque des messages de voyager à travers de multiples nœuds au cours de la conversation.
Ces deux modes vous permettent de sélectionner InstanceContextMode.PerSession. Est-ce vraiment ce que vous voulez ?
De sécurité WCF repose sur l'authentification mutuelle ; Si les deux parties de la confiance de l'autre, les informations d'identification (sur la base des réclamations), puis un cadre sécurisé peut être établie, dans laquelle tous les messages sont échangés dans la confidentialité, et tous les messages sont signés pour protéger leur intégrité. La sécurité de session est unique et vous ne pouvez pas réutiliser dans une autre conversation.
Ici est le problème avec votre contexte: le problème n'est pas sur Côté Serveur mais sur Côté Client. Parce que quelque chose doivent être conservés sur le client et sur le service, la reconstruction du service de rincer l'ensemble de la WCF contexte sur le service (toutes les instances & les séances seront éliminés) .Il n'existe pas de banque de données associés avec WCF séances (une différence avec asp.net session), un redémarrage sera tout laisser tomber. Toutefois, le client continue à croire pour être authentifié en raison de son "non valide" contexte.
Pour résoudre ce problème, il y a une case à cocher pour ce scénario sur la valeur par défaut Client Test Wcf: "Commencer un nouveau proxy". Sur WCf Tempête, il y a une config générale Sous le capot de/Divers "toujours créer de nouveaux proxy".
Remarque : Sur la production, vous n'aurez jamais ce scénario parce que votre service sera toujours.
Si vous me suivez, vous pouvez essayer fiable Session. Vous pouvez le tester, mais je ne suis pas sûr que cela fonctionne.
Remarque importante : je ne sais pas votre WCF niveau, mais dans WCF, les Clients et les Services doivent avoir synchronisé les configurations (même de sécurité, les paramètres de la session, ...)
wsHttpBinding de sécurité activé par défaut.
Essayez d'utiliser ceci sur votre configuration de liaison pour désactiver la sécurité:
Aussi, vous erreur est wsHttpBinding liés. Si vous utilisez des sessions et de redémarrage du serveur, le de la sécurité message d'erreur apparaîtra.
Selon MSDN:
et
Sonne comme le comportement attendu.
Vous pouvez utiliser le http de base de la liaison avec
TransportCredentialOnly mode de sécurité
Mode de sécurité ne devraient pas faire le travail.
N'oubliez pas d'appliquer le
bindingConfiguration="WsEventLogBinding"
sur votre ordinateur d'extrémité.